我正在嘗試使用Spring Data JPA的QueryDSL。使用QueryDSL的多個連接
我的數據庫有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();
「合同」是什麼意思?問題中沒有「合同」的代碼。另外,爲什麼從'PersonRole'到'Person'有一個'@ OneToOne'關聯?據推測,一個Person可以在多個Account中起作用,這意味着多個PersonRole記錄,每個Account都有一個用於Person的角色。因此,應該有一個從'PersonRole'到'Person'的'@ ManyToOne'關聯。如果沒有,爲什麼不把角色名稱和帳戶引用存儲到'Person'本身? – manish
對不起,我的意思是賬戶不是合同。我編輯過。所以真的有一個帳戶和人之間的多對多關係,以便解決我們使用連接表。雖然一個人可以在合同上以及在不同的合同中擔任很多角色,但我認爲通過將其合併到一個合約上的每個角色都會得到一個人。我是否應該將其改爲onetomany? – ejgreenwald