現在、Hibernateエンティティ(以下)のJavaプロジェクトで作業しています。私のデータアクセスオブジェクトのレイヤーをテストするために、私はH2 databaseを使用してメモリ内のデータベースを生成し、そこにクエリを投げています。この時点まで、すべてが問題ありません。H2データベースのSQLとして@EmbeddedIdを表す
ただし、@EmbeddedIdアノテーションをシミュレートするときに問題が発生します。
@Entity
@Table(name = "BSCOBJ")
public class BasicObject extends AbstractDomainObject {
@EmbeddedId // This annotation here
private RestrainPK restrain;
@Embeddable
public static class RestrainPK implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "CODI", nullable = false)
private String coDi;
@Column(name = "COGA", nullable = false)
private String coGa;
@Column(name = "TYOR", nullable = false)
private String tyOr;
public RestrainPK() {
}
... // Getters and setters
}
}
「単純」(もちろん、私は「通常」の要求が結果を与えることを確認)テーブルBSCOBJ
を作成し、データをフェッチするとき、それは何の価値を与えない取り込みます。このネストされたクラスをSQLテーブル作成/値挿入リクエストでどのように表現すればよいですか?それも可能ですか?事前に
おかげで、
EDIT
要求されたとして、ここではSQL /休止状態に関するいくつかのサンプルが走っています。
作成要求:
CREATE TABLE BSCOBJ (CODI VARCHAR(5) NOT NULL, COGA VARCHAR(5) NOT NULL, TYOR VARCHAR(5) NOT NULL);
挿入要求:次の値を持つ
select r.restrain.tyOr from mypackage.BasicObject r where r.restrain.coDi = :coDi and r.restrain.coGa = :coGa
:
テストコードを実行しようとすると、Hibernateが与えINSERT INTO BSCOBJ (CODI, COGA, TYOR) VALUES
('HELLO', 'MAT', 'REF'),
('BONJ', 'SOME', 'DAIL'),
('SOPA', 'KDA', 'RATIO');
リクエスト
coDi = "BONJ";
coGa = "SOME";
NoResultException
をスローします。私はリクエストの2行目からDAIL
が来ることを期待しています。
からあなた
@Column
注釈を削除クエリはあなたのために動作しません –OKセッションオブジェクト..を使用してクエリの作成を追加しようとしています.. so session.createQuery .. etc –
クエリで 'TYOR'カラムはどこにありますか?すべてのPKフィールドは、データでhibnertaeクエリをポストするのではなく、選択したクエリに含める必要があります。実行するテストコードを投稿してください。 、 –