类型定义在@ManyToOne 关联中不起作用,它具有复合嵌入式主键 JPA 的实体

Type defenition don't work in@ManyToOne association whith entity which have composite embedded primary key JPA

我使用 JPA 接口,提供程序 - Hibernate。一个实体嵌入了主键:

@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 注释的属性:

@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;

    //  ...
}

在数据库中,关联列的类型为 RAW。它使用了数据库 Oracle 10g。我的实体与 ManyToOne 关联 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;

        //   ...
    }

这里我也明确指出了RAW输入@JoinColoumn。在 EntityManagerProperties hibernate.hbm2ddl.auto = validate 中。休眠版本 - 5.1.1 最终版。但是应用程序在数据库验证阶段启动时失败。在堆栈跟踪中,我看到下一个异常:

架构验证:在 table [CD_PROPERTY_VALUE] 中的列 [CONTROL_KEY] 中遇到错误的列类型; 找到 [raw (Types#VARBINARY)],但期待 [varchar2(255 char) (Types#VARCHAR)]

关于上面提到的,我有一个问题:我还在哪里指定了 Hibernate 的类型?或者我可能错过了什么?

当所有与 CdControl 关联的类型都指向 RAW 时,它开始工作,而不仅仅是 CdPropertyValue。这种情况下的 Shema-validator 错误消息很混乱。