- - PR -
hibernate annotationで、複合キー使用時について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-03-27 14:50
初めまして。
hibernate annotationで、複合キー使用時について質問があります。 @IdClass内に記述してあるカラムのみが、 変数名をカラム名称として認識してしまいます。 その他は@Columnのname属性にに記されているものをカラム名称とします。 変数名とカラム名を同一にすることは、手間が掛かるので避けたいのですが、 他に何か良い方法はありませんか? (JDeveloperの最新版の機能により、一括で既存テーブルからEntityBeanが作成できるが、 カラム名称に'_'が混じっていると同一の変数名で作られないので) ----環境------------------------------ hibernate-3.1.2 hibernate-annotations-3.1beta8 spring-framework-1.2.7 oracle10g 10.1.0.4 -------------------------------------- テーブル1 CREATE TABLE HOGE1 ( HOGE1_CD CHAR(5) NOT NULL, HOGE1_GRP CHAR(10) NOT NULL, HOGE1_NMJ VARCHAR2(40), HOGE1_ID CHAR(20), CONSTRAINT PK_HOGE1 PRIMARY KEY (HOGE1_CD, HOGE1_GRP) USING INDEX ) テーブル2 CREATE TABLE HOGE2 ( HOGE2_CD CHAR(5) NOT NULL, HOGE2_GRP CHAR(10) NOT NULL, HOGE2_NMJ VARCHAR2(40), HOGE2_ID CHAR(20), CONSTRAINT PK_HOGE2 PRIMARY KEY (HOGE2_CD, HOGE2_GRP) USING INDEX ) 作成クラス Hoge1.class @Table(name="HOGE1") @IdClass(HOGE1PK.class) public class Hoge implements Serializable { private String hoge1Id; private String hoge1Cd; private String hoge1Grp; private String hoge1Nmj; private Hoge2 hoge2; @Id @Column(name="HOGE1_CD", nullable=false) public String getHoge1Cd() { return hoge1Cd; } @Id @Column(name="HOGE1_GRP", nullable=false) public String getHoge1Grp() { return hoge1Grp; } ・ ・ ・ @OneToOne() @JoinColumns({ @JoinColumn(name="HOGE1_CD",insertable=false, updatable=false), @JoinColumn(name="HOGE1_GRP",insertable=false, updatable=false) }) public Hoge2 getHoge2() { return hoge2; } } Hoge2.class ・ ・ Hoge1PK.class() ・ ・ Hoge2PK.class ・ ・ 上記4つのclassを作成し、下記ロジックを流すと、 DetachedCriteria criteria = getCriteria(Hoge1.class); criteria2.createAlias("hoge2","hoge2") .add(Restrictions.eq("hogeCd","hoge")) .add(Restrictions.eq("hoge2.hoge2Id","hogehoge")); getHibernateTemplate().findByCriteria(criteria); showsql select ・・・ from HOGE1 this_ left outer join HOGE2 hoge2_ on this_.HOGE1_CD=hoge2_.hoge2Cd and this_.HOGE1_GRP=hoge2_.hoge2Grp where this_.hoge1Cd=? and hoge2.HOGE2.ID=? - SQL Error: 904, SQLState: 42000 - ORA-00904: "hoge2_"."hoge2Cd": invalid identifier プライマリーキークラスに登録してあるカラムは、上記の通り、変数名がカラム名称になってしまうため エラーが起こってしまいます。 どなたか、よろしくお願いします。 |
1