Java 原因:org.hibernate.AnnotationException:对不同包中相同名称的实体使用相同的实体名称两次

Java 原因:org.hibernate.AnnotationException:对不同包中相同名称的实体使用相同的实体名称两次,java,hibernate,jpa,entity,Java,Hibernate,Jpa,Entity,我有两个同名的实体,但在不同的包中。对我来说,这显然是可行的。实体没有重复的名称 但我得到了一个错误: Caused by: org.hibernate.AnnotationException: Use of the same entity name twice: Variant 我找到了一个解决方案,它告诉我使用字符串值作为@Entity注释的name属性的参数,例如: @Entity(name="legal_Variant") 但我不喜欢在代码中使用字符串。可以用其他方法吗?F.e.使用

我有两个同名的实体,但在不同的包中。对我来说,这显然是可行的。实体没有重复的名称

但我得到了一个错误:

Caused by: org.hibernate.AnnotationException: Use of the same entity name twice: Variant
我找到了一个解决方案,它告诉我使用字符串值作为
@Entity
注释的name属性的参数,例如:

@Entity(name="legal_Variant")
但我不喜欢在代码中使用字符串。可以用其他方法吗?F.e.使用java反射,或以某种方式配置
JPA
使用全名(带包名)?

对我来说这很奇怪。我认为
JPA
也负责包名

我的班级代码:

package insurance.models.liability.hiv;
@Entity
@Table(name="lLiability_Part_Hiv_Var")
public class Variant extends GenericDictionary<Variant> {
}

package insurance.models.liability.legal;
@Entity
@Table(name="liability_Part_Legal_Var")
public class Variant extends GenericDictionary<Variant> {}
package insurance.models.liability.hiv;
@实体
@表(name=“lLiability\u Part\u Hiv\u Var”)
公共类变量扩展了GenericDictionary{
}
包装保险、模型、责任、法律;
@实体
@表(名称=“责任\部分\法律\风险值”)
公共类变量扩展了GenericDictionary{}

可以在映射文件中完成:

<hibernate-mapping>
    <import class="insurance.models.liability.legal.Variant" rename="Var1" />
</hibernate-mapping>

参考:

您可以指定类名和包,而不是使用别名,以避免此错误@实体(name=“insurance.models.liability.hiv.Variant”)@Entity(name=“insurance.models.liability.legal.Variant”)JPA规范明确规定默认实体名称为“非限定”实体类名。这个名称用于JPQL查询,因此使用完全限定的类名可能有点麻烦。Java注释不允许使用反射或类似的方法,因为值必须在编译时解析。Java代码中的字符串并不总是邪恶的;e、 您通常会使用一个字符串来指定任何JPQL查询。您可以使用语义名称(例如“HIV_变体”和“Legal_变体”)。这些将是可读的,并且合理地不受类名更改的影响。Arin如果我使用您的解决方案,在使用HQL查询时,我将不得不使用全名(带包),如保险.models.liability.hiv.Variant,因此编写起来会非常困难。根据Brian Vosburgh的回答,我将使用字符串名称。但在进一步的编码中,我将尝试将这些实体合并为一个实体,以避免重复。也许我会使用
继承
将特定元素拆分为不同的
实体
请看,只要我可以使用
Java注释
我就不会再回到
XML
from Var1