1. ホーム
  2. database

[解決済み] Hibernateです。ManyToOne生成フィールドraw(255)

2022-02-26 13:57:35

質問

最近、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;

これは定義されたクラスを指す正しい外部カラムを生成しますが、同じクラスに関するカラムも生成します。 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 {
   // ...
}

解決方法は?

に答えがありました。 Hibernateで複合キーをマッピングすると、Oracleで生のフィールドが生成される :

フィールドとメソッドにアノテーションを混在させていました。また、抽象的なスーパークラスには@Idを、派生クラスには再定義を付けていました。

この2つの要素を修正し、DBをクリーニングし、"create" ddlモードで再生成すると、修正はもはやRAWフィールドタイプを生成しないことが証明されました。

いつもありがとうございます。