は、私は、Java永続エンティティ表については、以下の構造を有する:Spring @Queryを要素のコレクションと共に使用して、2つのテーブル間で正しい結合を行うにはどうすればよいですか?
@Entity
@Table
public class Product {
@Id
private String id;
@Column
private String name;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Price> prices;
// getters and setters
}
@Entity
@Table
public class Price {
@Id
private String id;
@Column
private Float value;
@Column
private Strung type;
// getters and setters
}
データベースはHQLです。テーブルは自動的に作成されているので、私は3つのテーブルで、この構造を持っている:
CREATE MEMORY TABLE PRODUCT (ID VARCHAR(255) NOT NULL PRIMARY KEY, NAME VARCHAR(255))
CREATE MEMORY TABLE PRICE (ID VARCHAR(255) NOT NULL PRIMARY KEY, VALUE DOUBLE, TYPE VARCHAR(255))
CREATE MEMORY TABLE PRODUCT_PRICE (PRODUCT_ID VARCHAR(255) NOT NULL, PRICES_ID VARCHAR(255) NOT NULL, CONSTRAINT FK_SJ093JT9KRVI6PN4LQBDO30FU FOREIGN KEY(PRICES_ID) REFERENCES PRICE(ID),CONSTRAINT FK_H70YJF4SF4ABLK7MSXXV648Q9 FOREIGN KEY(PRODUCT_ID) REFERENCES PRODUCT(ID),CONSTRAINT UK_QJ093JT9KRVI4PN2LQBDO30FU UNIQUE(PRICES_ID))
「中間」テーブルPRODUCT_PRICEはわずか2つのフィールド(PRODUCTと価格の間に参加させるためのID)を含んでいます。
はここにいくつかの例の件のデータがあります。
INSERT INTO PRODUCT ('PRD001','Product 1');
INSERT INTO PRICE ('PRC001', 1000, 'euro');
INSERT INTO PRICE ('PRC002', 50, 'tax');
INSERT INTO PRODUCT_PRICE ('PRD001','PRC001');
INSERT INTO PRODUCT_PRICE ('PRD001','PRC002');
私はすべての製品とその価格タイプ=「ユーロ」を検索するJPAリポジトリに問い合わせを行う必要があります。
私のようなもので、春@queryを使用したい:
@Query("select p from Product p where p.prices.type = 'euro'")
どのように私は正しいが参加することができますか?私のサンプルクエリは、Hibernate Exceptionを生成します。
ありがとうございました。
であり、これを試してみてください必要!それは完全に動作します!ありがとう。 –