【发布时间】:2018-01-31 00:16:21
【问题描述】:
我正在尝试将 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();
【问题讨论】:
-
contracts是什么意思?问题中没有contract的代码。另外,为什么从PersonRole到Person之间存在@OneToOne关联?据推测,单个Person可以在多个Accounts 中发挥作用,这意味着多个PersonRole记录,每个Account记录一个,其中Person有一个角色。因此,应该有一个从PersonRole到Person的@ManyToOne关联。如果没有,为什么不将角色名称和帐户引用与Person本身一起存储? -
对不起,我的意思是帐户而不是合同。我编辑了。因此,帐户和人员之间确实存在多对多关系,因此为了解决我们使用连接表的问题。虽然一个人可以在一份合同和不同的合同中担任多个角色,但我认为通过使其成为一个人,可以为合同中的每个角色分配一个人。我应该将其更改为 onetomany 吗?
标签: jpa spring-data-jpa querydsl