【问题标题】:Type defenition don't work in@ManyToOne association whith entity which have composite embedded primary key JPA类型定义在具有复合嵌入式主键 JPA 的实体的@ManyToOne 关联中不起作用
【发布时间】:2017-09-17 11:18:09
【问题描述】:

我使用 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;
    }

    //   ...

}

在嵌入的主键中,我定义了数据库类型的列类型的属性 @Coloumn 注释的columnDefinition 属性:

@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。我有与 CdControlManyToOne 关联的实体:

    @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 最终版。但是应用程序在数据库验证阶段启动时失败。在堆栈跟踪中,我看到了下一个异常:

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

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

【问题讨论】:

    标签: hibernate jpa primary-key many-to-one


    【解决方案1】:

    当输入与 CdControl 的所有关联都指向 RAW 时,它开始起作用,而不仅仅是 CdPropertyValue。 Shema-validator 在这种情况下的错误信息很混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 2021-08-11
      • 2013-12-24
      相关资源
      最近更新 更多