我有嵌入两个ModelId
类的实体,其中一个是EmbeddedId
,另一个引用了另一个实体。
@Entity
public class Report implements Serializable {
@EmbeddedId
private final ModelId id;
@AttributeOverride(name = "id", column = @Column(name = "scheme_id")
@Embedded
private ModelId schemeId;
public void changeScheme(ModelId schemeId) {
this.schemeId = schemeId;
}
}
@Embeddable
public class ModelId implements Serializable {
private Integer id;
}
我可以插入并选择, Report
但是当我更新该字段时,schemeId
我得到:
org.eclipse.persistence.exceptions.ValidationException
Exception Description: The attribute [id] of class [mypackage.ModelId] is mapped
to a primary key column in the database. Updates are not allowed.
我将GlassFish 4.1与EclipseLink 2.5一起使用。
我是否缺少某些东西?或者它是EclipseLink错误?
问题是,只有id
使主键,schemeId
才是外键。当我更改schemeId
为关联时,它可以正常工作:
@ManyToOne
@JoinColumn(name = "scheme_id", referencedColumnName = "id")
private Scheme scheme;
public void changeScheme(Scheme scheme) {
this.scheme = scheme;
}
我一直在测试许多批注组合以及在GF4.0和EclipseLink 2.6中具有相同结果的情况。
这似乎是EclipseLink的无视@AttributeOverride
更新过程中,并混合内schemeId.id
用id.id
。
我们有同样的问题。看来该缺陷已被eclipselink的现有错误所覆盖(相对于2.6.0版,我仍然在2.6.3中看到此问题):
https://bugs.eclipse.org/bugs/show_bug.cgi?id=477638
它不会出现有任何这还没有活动,所以在此期间我换了@EmbeddedId
是公正@Embedded
并增加了一个专用的主键代替,就像这样:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int privateId;
我还为以前属于主键的属性添加了一个复合唯一约束。我还必须更改EntityManager.find(dataType, id)
呼叫以代替查询。我希望这有帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句