2017-04-20 33 views
1

我使用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挑吧向上?或者可能是我错过了什么?

回答

0

它开始工作时类型的所有关联与CdControl指出,以RAW,不仅CdPropertyValue。在这种情况下Shema验证器错误消息是困惑的。

相关问题