我有以下问题。
我有一个映射的超类:
@MappedSuperclass
public class MySuperClass {
@Version
private long version;
private String foo;
private String bar;
// getter/setter omitted
}
和两个实体,第二个实体使用共享主键:
@Entity
public class MainEntity extends MySuperClass {
@Id @GeneratedValue
private Long id;
@OneToOne(mappedBy="main")
private SecondaryEntity secondary;
// getter/setter omitted
}
@Entity
public class SecondaryEntity extends MySuperClass {
@Id
@OneToOne(optional=false)
private MainEntity main;
// getter/setter omitted
}
我所看到的是,当我尝试持久化SecondaryEntity实例时,EclipseLink会生成一个重复映射超类字段的SQL语句:
INSERT INTO SecondaryEntity ('field1', 'field2', 'version', 'foo', 'bar', 'field3', 'version', 'foo', 'bar', 'main_id') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
当然,MySql抱怨:列'版本'指定了两次 (我认为它没有提及'foo'和'bar',因为它停在'版本',但它们也会重复出现。)
我做错了吗? EclipseLink中是否存在“共享主键”和“映射超类”组合的问题?
提前致谢。
答案 0 :(得分:0)
问题与使用"共享主键和#34;无关。和#34;映射的超类",而是SecondaryEntity
有一个嵌入字段错误地扩展了相同的映射超类,因此EclipseLink试图在SQL插入中多次嵌入映射的超类属性查询。
无论如何,EclipseLink在建模阶段的任何阶段,启动时或从实体生成表时都没有产生错误或警告。我在EclipseLink Bugzilla中提交了bug 456054来跟踪这个问题。