JPA如何识别具有相同名称但在不同包中的两个类?

时间:2011-11-17 13:58:45

标签: java hibernate jpa entitymanager

我在项目中使用JPA和Hibernate。我有两个相同名称的课程,但在不同的包中。他们是:

@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类。

1 个答案:

答案 0 :(得分:4)

如果要创建JPQL查询,则需要将实体名称传递给它。如您所发布的那样,您有2个实体,由相同 Java类表示,但不同实体名称(X_USER由您明确设置,User隐式设置。)

如果你想动态获取实体的名称,你应该使用Metamodel,所以这样的事情应该做(不检查):

EntityManager em = ...
Metamodel model = em.getEntityManagerFactory().getMetamodel();
String entityName = model.entity(com.your.pckg.User.class).getName();

HTH。