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

标签 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 类。

最佳答案

如果您想创建一个 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.

关于java - JPA 如何识别两个具有相同名称但位于不同包中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8168297/

相关文章:

java - Hibernate 使用 @MapKey 注释存储 map

java - 带条件(真或某些原因导致 NPE)的 Hibernate 选择列表不返回任何结果

java - Go channel vs Java BlockingQueue

java - 用java进行游戏模拟有问题

multithreading - 向实体添加关联以对消息线程进行建模是什么意思?

java - 如何将存储过程的返回值映射到 Hibernate 中的实体类

database - PostgreSQL JPA 级联部分工作

java - Jpa:删除依赖项而不是更新它们

java - 执行yardstick-ignite框架时发生权限错误

java - 在运行时更改二维数组的列大小