【问题标题】:How can the JPA recognize two classes with the same name but in different packages?JPA 如何识别两个具有相同名称但位于不同包中的类?
【发布时间】:2011-12-31 09:12:03
【问题描述】:

我在我的项目中使用 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 类。

【问题讨论】:

  • getName() 应该返回 FQN。你遇到了什么错误?
  • @XaviLópez 我已经编辑了我的问题。

标签: java hibernate jpa entitymanager


【解决方案1】:

如果您想创建一个 JPQL 查询,您需要将 实体名称 传递给它。正如您发布的那样,您有 2 个实体,它们由 same Java 类表示,但 不同 实体名称(X_USER 由您显式设置,User 隐式设置) .

如果您想动态获取实体的名称,您应该使用Metamodel,所以这样的东西应该可以完成工作(未选中):

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

HTH。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2020-03-30
    • 2017-09-26
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多