- PR -

hibernate annotationで、複合キー使用時について

1
投稿者投稿内容
hogehoge
会議室デビュー日: 2006/03/27
投稿数: 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

スキルアップ/キャリアアップ(JOB@IT)