jpa實現多對多的屬性時查詢的兩種方法

2022-10-07 06:21:12 字數 1073 閱讀 6810

目錄

使用@query拼接jpql語句完成多對多的查詢;

@query(

select user from user u join student s on s程式設計客棧.id = u.id where u.name like :name

)user findallbyname(@param(「name」)string name);

user中有list屬性,多對多的關係;

**如下:

specification sp = new specification<>()

if(channel > 0)

list list = dao.findall(specification,new sort(desc,"id"));

}}乙個老師教許多學生,乙個學生被許多老師教,乙個學生有好多書,同一種書被許多同學擁有.

要查詢教擁有書"a"的學生的老師!

select t from teacher t join t.students s join s.books b where b.name = 'a'

解釋:t.students s中s並不是集合的意思,而是t的students物件的表別名,join t.students s這個hql,hibernate會翻譯成兩個表的內連線關係

錯誤寫法:

select t fromhtpydubmk teacher t where t.students.books.name = 'a'

其實道理是很顯然的,t.students是乙個set,那麼這個set怎麼可能有books這樣的屬性呢?同理books.name也不對,所以使用表間連線並給出別名t.students s,此時的物件s才有books屬性,所以可以寫s.books b,最後使用b.name限制查詢b.name = 'a'.

select t from teacher t,student s,book b where s.id in elements(t.students) and b.id in elements(s.books)

這種方法沒有出錯!不過這種方式要用子查詢!

本文標題: jpa實現多對多的屬性時查詢的兩種方法

本文位址:

jpa 多對多對映 記下來 以便查詢

entity table name brands public class brand inversejoincolumns private listdealers private integer status public integer getstatus public void setstat...

簡單的多對多查詢

前段時間金蝶的過來面試.有個資料庫方面很簡單的題目.居然不會寫.還好.現在不會,沒事,就怕真正開發的時候不會,那才叫悲劇.題目是這樣的 學生表 create table student id integer stu no integer name varchar2 32 課程表 create tab...

如何使用JPA註解標註多對多的關係

假設應用場景如下 teacher與student是多對多的關係,其中,teacher類對應teacher表如下 create table teacher id bigint 20 not null auto increment,name varchar 50 default null,primary...