gpt4 book ai didi

java - 如何在 Hibernate/JPA 中使用 xml 编写命名查询?

转载 作者:行者123 更新时间:2023-11-30 10:58:59 25 4
gpt4 key购买 nike

我可以毫无问题地使用带注释的命名查询。但是当我尝试切换到 orm.xml 文件以外部化我的应用程序时,找不到我的命名查询,它位于类路径 下的 User.orm.xml 文件中META-INF 目录。我的 User.orm.xml 文件的完整路径是 src\main\resources\META-INF\User.orm.xml 当我尝试运行查询时,我得到以下异常,

java.lang.IllegalArgumentException: No query defined for that name [READ_ALL_USERS]
[artifact:mvn] at org.hibernate.jpa.spi.AbstractEntityManagerImpl.buildQueryFromName(AbstractEntityManagerImpl.java:788)

我的 persistence.xmlsrc/main/resources/META-INF 下看起来像这样,

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.0">

<persistence-unit name="webPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.spring.model.User</class>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/spring?zeroDateTimeBehavior=convertToNull"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="password"/>
</properties>
</persistence-unit>

</persistence>

我的 User.orm.xml 文件有以下命名查询,

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd" version="2.0">
<named-query name="READ_ALL_USERS">
<query>SELECT user from com.spring.User user</query>
</named-query>
</entity-mappings>

我看着 this question这建议将 orm.xml 文件保留在模型类所在的位置。但这对我不起作用。上面的代码有什么问题。

我还在我的 persistence.xml 中包含了映射 User.orm.xml 文件,它已经在我的 META-INF 目录下的类路径中。我尝试了以下文件映射,但没有一个检测到我的 xml 文件,

<mapping-file>User.orm.xml</mapping-file>

<mapping-file>/META-INF/User.orm.xml</mapping-file>

<mapping-file>classpath:User.orm.xml</mapping-file>

最佳答案

您必须添加 <mapping-file> <persistence-unit> 内的元素元素。

例子: <persistence-unit>
<mapping-file>User.orm.xml</mapping-file>
</persistence-unit>

来源:https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/configuration.html

关于java - 如何在 Hibernate/JPA 中使用 xml 编写命名查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32051598/

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