【发布时间】:2014-04-17 02:33:04
【问题描述】:
我正在将代码从 EJB2 迁移到 EJB3。我已将 POJO 转换为 JPA 实体。很少有实体具有相同的名称,例如 @Entity(name="myentity1")。我在部署时遇到错误“实体名称在持久性单元中必须是唯一的”。发生这种情况是因为模块依赖于具有相同名称的实体的其他模块。是否有任何方法可以在使用时(SessionCustomizer 或任何其他方式)中断它并每次动态更新名称?我现在无法更改实体名称,因为实体名称被广泛使用。我正在使用 EcllipseLink 2.5
示例代码
EJB Module1(依赖于 EJB Module2)
package com.my.module1.package1;
@javax.persistence.Entity(name = "myentity1")
@Table(name = "TABLE1")
public class MyEntity1
implements Serializable {
@Column(name = "ID")
private Long Id;
public Long getId() {
return Id;
}
public void setId(Long Id) {
this.Id = Id;
}
}
// EJB 模块2
package com.my.module2.package2;
@javax.persistence.Entity(name = "myentity1")
@Table(name = "TABLE1")
public class MyEntity1
implements Serializable {
@Column(name = "ID")
private Long Id;
public Long getId() {
return Id;
}
public void setId(Long Id) {
this.Id = Id;
}
}
任何帮助将不胜感激。
【问题讨论】:
-
它们在持久化单元中必须是唯一的,以便名称可以识别哪些类和表将用于查询。不过,您的软件包可能应该进入它们自己的持久性单元,而不是将它们全部组合在一起。或者您可以使用 orm.xml 覆盖实体注释。
标签: jpa eclipselink jpa-2.0 ejb-3.0