SINGLE_TABLE 継承を使用して継承階層をマップするために、Oracle で Spring Roo を使用しています。Roo データベースのリバース エンジニアリングによって、このクラスが作成されました。@Discriminator... アノテーションと inheritanceType を追加しました。
@RooDbManaged(automaticallyDelete = true)
@RooJpaActiveRecord(inheritanceType = "SINGLE_TABLE", table = "MEASUREMENT", schema = "SCREENING", sequenceName = "MEASUREMENT_SEQ")
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING, length = 50)
@DiscriminatorValue("TEXT")
public class Measurement {
...
}
Roo は Measurement_Roo_DbManaged.aj をビルドしました
privileged aspect Measurement_Roo_DbManaged {
...
@Column(name = "DTYPE", length = 50)
@NotNull
private String Measurement.dtype;
...
}
および Measurement_Roo_Jpa_Entity.aj を使用
declare @type: Measurement: @Inheritance(strategy = InheritanceType.SINGLE_TABLE);
(Roo にあまり詳しくない方のために説明すると、これらの部分は、コンパイルされる前にメイン クラスに組み込まれます。)
次に、サブクラスを作成しました
@Entity
@DiscriminatorValue(value="NUMERIC")
public class MeasurementNumeric extends Measurement {
public MeasurementNumeric(Long value) {
setNumericValue(value);
}
}
今、アプリを起動するたびに、コンテキストの初期化で BeanCreationException がスローされますが、これは最終的には
org.hibernate.MappingException: Repeated column in mapping for entity: my.package.domain.MeasurementNumeric column: DTYPE (should be mapped with insert="false" update="false")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:682)
私は一日中ここで何が起こっているのかを理解しようとしてきましたが、どこにも行き着きません。私が言及したこのエラーを他に見たのは、誰かが複数のプロパティで同時に @Column(name="someName") を宣言したときだけです。しかし、この場合、それがどのように起こっているのかわかりません。
誰かが何が起こっているのか、それを修正する方法についての手がかりを教えてもらえますか?