4

注釈と休止状態で複合キーを使用する方法がわかりません...

たとえば、次のテーブルがあります。

TABLE_A

初期化、数値、CNT、TYP

TABLE_B

INIT、NUM、V_CNT

TABLE A と B の主キーは、INIT と NUM で構成される複合キーです。

クエリを実行したい:

   "FROM TABLE_A AS A " +
   "LEFT JOIN A.hiber_join AS B " +
   "WHERE A.INIT||A.NUM IN (:carList) AND A.INIT IN (:initList) AND A.NUM IN              (:numberList) " + 
    "AND B.V_CNT > 0

私のクラスは次のようになります。

*クラス_A*

public class TABLE_A implements Serializable{

private String INIT;
private String NUM;
private Integer CNT;
private String TYP;

    @OneToOne
@JoinTable(name = "TABLE_B",
    joinColumns = {@JoinColumn(name = "INIT"), @JoinColumn(name = "NUM")}

)
protected TABLE_B hiber_join;

    public TABLE_A()
    {}

    public void doHibernateStuff()
    {
     //call query get result set
    }

}

//クラスB

public class TABLE_B implements Serializable{

private String NUM;
private String INIT;
private Integer V_CNT;
}

休止状態と注釈の使用方法の基本からする必要があるため、できるだけシンプルにしようとしました...しばらく作業していて、休止状態のドキュメントやその他の質問が役に立たなかったことがわかるように...

4

1 に答える 1

1

私の知る限り、PrimaryKeyJoinColumn を使用する必要があります (標準の Java 命名規則に準拠するようにクラスと属性の名前を変更しましたが、意味のある名前を選択する必要があります)。

public class BEntity implements Serializable{

    @Id
    @Column(name = "NUM")
    private String num;

    @Id
    @Column(name = "INIT")
    private String init;

    @Column(name = "V_CNT")
    private Integer vcnt;
}

public class AEntity implements Serializable{

    @Id
    @Column(name = "NUM")
    private String num;

    @Id
    @Column(name = "INIT")
    private String init;

    @OneToOne
    @PrimaryKeyJoinColumns({
        @PrimaryKeyJoinColumn(name="NUM", referencedColumnName="NUM"),
        @PrimaryKeyJoinColumn(name="INIT", referencedColumnName="INIT")
    })
    private BEntity bEntity;
}
于 2012-05-25T19:37:15.060 に答える