我试图将QueryDSL与Spring Data JPA一起使用。
我的数据库有3个表。
1)包含帐户信息的帐户表,特别是帐号。 2)PersonRole表,其在账户(如所有者)上具有人的角色以及相应的账号和他的个人ID号。 3)有一排人的人桌。他们的身份证号码和名字,姓氏等......
我的实体看起来像这样:
@Entity
Account{
//...Other fields ommited
// **
@OneToMany
@JoinColumn(name = "ACCNT_NUMBER")
List<PersonRole> personRoles;**
}
@Entity
PersonRole{
String role;
// ...Other fields ommited
// **
@OneToOne
@JoinColumn(name = "PERSON_ID")
Person person;**
}
@Entity
Person{...}
我想过滤我按人名和姓氏选择的帐户,然后使用它来填充具有相关人员和人员的合同实体。
我假设我必须创建连接才能执行此操作。我尝试了很多东西,但我一直在收到错误。我已经创建了相应的QClasses。我知道下面的代码是错的,它不起作用,但也许你可以看看我是否在正确的轨道上并可能帮助我。任何帮助是极大的赞赏。谢谢!
QAccount account = QAccount.account;
QPersonRole personRoles = QPersonRole.personRole;
QPerson person = QPerson.person;
JPAQuery<Account> query = new JPAQuery<>(entityManager);
List<Account> accountList = query
.from(account)
.innerJoin(acccount.personRoles, personRoles)
.innerJoin(person)
.where(person.lastName.eq("John")
.and(person.lastName.eq("Doe")))
.fetch();
答案 0 :(得分:2)
当你想要对一对多进行过滤时,你只需要连接... jpql仍然可以被利用...而且我更喜欢在personRole上使用单数:
QAccount account = QAccount.account;
QPersonRole personRole = QPersonRole.personRole;
JPAQuery<Account> query = new JPAQuery<>(entityManager);
List<Account> accountList = query
.from(account)
.innerJoin(acccount.personRoles, personRole)
.where(personRole.person.lastName.eq("John")
.and(personRole.person.lastName.eq("Doe")))
.fetch();
请注意如何不必加入Person。