2016-05-03 7 views
3
Entity : Details 
@OneToMany(mappedBy = "refId") 
private Collection<PersonDetail> PersonDetailCollection; 
@Id 
@Column(name = "REFERENCE_ID") 
private String referenceId; 
@Column(name = "PRICE_ID") 
private String priceID; 
@Column(name = "NAME") 
private String name; 
Getter and Setter of all variable 

Entity: PersonDetail 
@JoinColumn(name = "REF_ID", referencedColumnName="REFERENCE_ID") 
@ManyToOne 
private Details refId; 
Getter and Setter of all variable 

Entity: PriceDetail 
@Id 
@Column(name = "PRICE_ID") 
private String priceID; 
@Column(name = "PRICE") 
private String price; 
Getter and Setter of all variable 

ここでは、テーブルの詳細とPersonDetailに結合がある3つのテーブルがあります。 PriceDetailテーブルの結合なしで単一のエンティティでこれらの3つのテーブルからデータを取得する方法は?JPAでは、単一のエンティティクラスで複数のテーブルから取得する方法

+0

この場合、なぜjoinを使用したくないですか? PersonDetailはすでにDetailsと関連していますが、PriceDetailも同様の理由ではありませんか? – rapasoft

+0

テーブルはそのように設計されており、変更する権限はありません。 – rsi

+0

まだ分かりません。詳細はPRICE_IDを持ち、PriceDetailsはPRICE_IDを持っていますが、なぜあなたは ''詳細情報をD.PRICE_ID = P.PRICE_ID'に置くことができませんか?または、エンティティを変更できないことを意味しましたか? – rapasoft

答えて

1

あなたが望むものはselecting into new object instance using its constructorだと思います。

新しいクラスを作成する必要があります。 DetailsResultには、取得する必要があるすべてのプロパティが含まれています。次に、JPQLクエリを使用してデータを取得することができます。

"select new your.package.DetailsResult(
<fill here the required constructor arguments, 
that you will get from the query results, like 'd.referenceId' or 'p.priceID'>) 
from Details d, PriceDetail p where d.priceID = p.priceID" 

これはあなたが正しい軌道に乗ることを望みます。

1

親クラスにNamedNativeQueryを記述してみてください。私はこれがうまくいくと思います!!

+0

ありがとう...それは働いた – rsi

関連する問題