JPA如何识别两个具有相同名称但不同包中的类?
问题描述:
我为我的项目使用JPA和Hibernate。我有两个班,同名但不同包。它们是:JPA如何识别两个具有相同名称但不同包中的类?
@Entity(name = "X_USER")
@Table(name = "X_USER")
public class User {
和:
@Entity
@Table(name="Y_USER")
public class User {
我创建一个搜索查询与:.getSimpleName()
但没有工作,因为其简单的名称是相同的。我将其更改为.getName()
。
但是,它仍然混淆了哪个User
返回。
编辑:
我有:
SELECT_BY_PROPERTY_QUERY = "SELECT p FROM :CLASS: p WHERE p.:PROPNAME:=?";
和我说:
SELECT_BY_PROPERTY_QUERY.replaceFirst(":CLASS:", clazz.getName()).replaceFirst(":PROPNAME:", propertyName);
,当我调试它,它使得类似:
Select p from User p Where p.name=?
它仍然是User
,它不包括包信息,并返回错误码User
类。
答
如果要创建JPQL查询,则需要将实体名称传递给它。如您所发布的,您有两个实体,其中相同 Java类,但不同实体名称(X_USER
由您明确设置,User
隐式设置)。
如果要动态让你倒是应该使用Metamodel
实体的名称,所以这样的事情应该做的工作(不打勾):
EntityManager em = ...
Metamodel model = em.getEntityManagerFactory().getMetamodel();
String entityName = model.entity(com.your.pckg.User.class).getName();
HTH。
'getName()'应该返回FQN。你遇到了什么错误? –
@XaviLópez我编辑了我的问题。 – kamaci