我使用JPA接口,provider - Hibernate。一个实体具有嵌入的主键:类型defenition在@ ManyToOne association whith实体中没有工作,它具有复合嵌入式主键JPA
@Embeddable
public class CdControlPk implements Serializable {
@Column(name="CONTROL_KEY", columnDefinition = "RAW")
private String controlKey;
@Column(name="CONTROL_OWNER_KEY", columnDefinition = "RAW")
private String controlOwnerKey;
// ...
}
在数据库关联:
@Entity
@Table(name = "CD_CONTROL")
public class CdControl extends BaseDAO<CdControl> {
@EmbeddedId
private CdControlPk id;
@Column(name = "CD_CONTROL_NAME")
private String cdControlName;
// ...
public CdControlPk getId() {
return id;
}
public void setId(CdControlPk id) {
this.id = id;
}
// ...
}
在嵌入式主键我在 columnDefinition@Coloumn注解的属性定义的列类型特性中的数据库类型coloumn有RAW。它使用的数据库数据库Oracle 10g。我有有多对一 assosiation与CdControl实体:
@Entity
@Table(name="CD_PROPERTY_VALUE")
public class CdPropertyValue extends BaseDAO<CdPropertyValue> implements Serializable {
@EmbeddedId
private CdPropertyValuePK id;
@Column(name="VALUE")
private String value;
//bi-directional many-to-one association to CdControl
@ManyToOne
@MapsId("id")
@JoinColumns({
@JoinColumn(name = "CONTROL_OWNER_KEY", referencedColumnName ="CONTROL_OWNER_KEY",
columnDefinition="RAW", insertable=false,updatable=false),
@JoinColumn(name = "CONTROL_KEY", referencedColumnName = "CONTROL_KEY",
columnDefinition="RAW", insertable=false,updatable=false)
})
private CdControl cdControl;
// ...
}
在这里,我也明确@JoinColoumn指出RAW类型。在EntityManagerPropertieshibernate.hbm2ddl.auto = validate
。休眠版本 - 5.1.1 FINAL。但是,应用程序在数据库验证阶段启动失败。在堆栈跟踪中,我看到下一个异常:
架构验证:表[CD_PROPERTY_VALUE]中列[CONTROL_KEY]中遇到错误的列类型; 发现[RAW(类型#VARBINARY),但期待[VARCHAR2(255焦)(类型#VARCHAR)
在有提及方面,我有一个问题:还有什么地方我有指定类型到Hibernate挑吧向上?或者可能是我错过了什么?