私は、Spring Data JPAでQueryDSLを使用しようとしています。QueryDSLを使用した複数の結合
私のデータベースには3つのテーブルがあります。
1)アカウント情報と具体的にはアカウント番号を持つアカウントテーブル。 2)アカウントに人の役割(所有者など)と対応するアカウント番号とその人ID番号を持つPersonRoleテーブル。 3)人の列を持つ人のテーブル。彼らのID番号と名前、名字等...
が私のエンティティは次のようになります。
@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{...}
私は人姓と名で選択していることを使用するアカウントをフィルタリングします関連付けられた個人および人物を有する契約実体を埋める。
私はこれを行うためにジョインを作成する必要があると仮定します。私はたくさんのことを試みましたが、私は間違いを続けています。対応するQClassを作成しました。私は以下のコードが間違っていることを知っていますが、うまくいかないかもしれませんが、おそらくあなたは私が正しい道にいるかどうかを知ることができ、おそらく私を助けます。どんな助けでも大歓迎です。ありがとうございました!あなたは多くの1つでフィルタしたいときにのみ必要
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'sの中で役割を持つことができます。これは複数の 'PersonRole'レコードを意味し、' Person'が役割を持つ 'Account'ごとに1つです。したがって、 'PersonRole'から' Person'への '@ ManyToOne'関連があるはずです。もしそうでなければ、 'Person'自身でロール名とアカウント参照を保存するだけではどうですか? – manish
申し訳ありません、私は契約ではなくアカウントを意味していました。私は編集しました。だから実際には、アカウントと人の間に多かれ少なかれ多くの関係があるので、私たちが結合テーブルを使用することを解決するためです。人は契約上、そして異なる契約上で多くの役割を果たすことができますが、私はそれをonetooneにすることによって契約上のすべての役割に対して人を得られると考えました。私はそれをonetomanyに変えるべきですか? – ejgreenwald