gpt4 book ai didi

java - JPA实体管理器从实体createQuery,不同的包但名称相同

转载 作者:行者123 更新时间:2023-11-30 03:05:56 24 4
gpt4 key购买 nike

我的模块中有以下实体

com.example.Company (table_name: COMPANIES)

com.example.workspace.Company (table_name: WS_COMPANIES)

在主类中,我只导入实体import com.example.Company 。然后我想找到DB中的所有公司

TypedQuery<Company> query = (javax.persistence.EntityManager) em.createQuery("from Company", Company.class);

但是,我在尝试查询时遇到错误

Type specified for TypedQuery [com.example.Company] is incompatible with query return type [class com.example.workspace.Company]

是否有任何方法可以解决此问题,如果有人可以解释实体管理器如何构造创建查询,我们将不胜感激?

em.createQuery("from com.example.Company", Company.class)似乎是一种方式,但看起来并不优雅。我可能想要com.example.Company作为默认值

下面是persistence.xml文件中,类按顺序排列

<persistence-unit name="pcc-cpod-persistence-unit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.example.Company</class>
<class>com.example.workspace.Company</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
</persistence-unit>

最佳答案

来自 JPA 规范:

4.3.1 命名

实体在查询字符串中通过实体名称指定。实体名称由名称定义实体注释的元素(或实体名称 XML 描述符元素),默认为实体类的非限定名称。实体名称的范围在持久性单元内,并且必须是在持久性单元内是唯一的。

据此,“来自公司”是指名称为“公司”的@Entity。由于不允许使用重复的名称,因此 com.example.Company 必须具有与“Company”不同的实体名称。如果您查看 com.example.Company 的 @Entity 定义,您应该会找到它的名称,如果您在 SELECT 查询中使用该名称,您应该会得到您想要的结果。

关于java - JPA实体管理器从实体createQuery,不同的包但名称相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com