Hibernate:ManyToOne 生成字段 raw(255)

Hibernate: ManyToOne generating field raw(255)

我最近从 hibernate-core 4.1.7 升级到 5.0.9 并且遇到此代码问题:

    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    @JoinColumn(name = "FK_AAA", foreignKey = @ForeignKey(name = "CS_BBB"))
    @org.hibernate.annotations.Index(name = "IDX_CCC", columnNames = "FK_DDD")
    private ImportData importData;

这会生成指向定义 class 的正确外部列,但也会在相同的 class 上生成一个列: IMPORTDATA RAW(255)

为什么会生成这个 raw(255) 列?我认为它不是用 Hibernate-core 4.1.7

生成的

有什么想法吗?

更新 1:这里是更长的代码片段:


@MappedSuperclass
@Access(AccessType.PROPERTY)
public abstract class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public abstract Long getId();
}


@Entity
@Table(name = "IMPORT_DATA", uniqueConstraints = {
        @UniqueConstraint(name = "UC_IMP_BID", columnNames = {"BUSINESS_ID"})
}, indexes = {
        @Index(name = "IDX_IMP_DGXML_ID", columnList = "FK_DGXML_ID"),
        @Index(name = "IDX_IMP_IMPXML_ID", columnList = "FK_IMPXML_ID")
})
public class ImportData extends BaseEntity { 

  @Id @GeneratedValue(strategy = GenerationType.AUTO) 
  public Long getId() { return id; } 
  // ... 

}



@Entity(name = "MUTATION")
@Table(name = "MUTATION")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING)
@SequenceGenerator(name = "mutationsSeq", sequenceName = "MUTATIONS_SEQUENCE", allocationSize = 1)
public abstract class Mutation extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "mutationsSeq")
    private Long id;

  @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
    @JoinColumn(name = "FK_IMP_ID", foreignKey = @ForeignKey(name = "CS_MUT_IMP_ID"))
    @org.hibernate.annotations.Index(name = "IDX_MUT_IMP_ID", columnNames = "FK_IMP_ID")
    protected ImportData importData;

}


@Entity(name="XXX")
@DiscriminatorValue("XXX_DISC")
public class XXX extends Mutation {
   // ...
}

我在 Mapping composite key with Hibernate produces a raw field in Oracle 上找到了答案:

我在字段和方法上混合注释。我还在抽象超级 class 上使用了 @Id,在派生 class.

上使用了重新定义

修复这两个元素,清理 DB 并在“创建”ddl 模式下重新生成证明修复不再生成 RAW 字段类型。

感谢您的帮助!