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

标签 java xml spring hibernate jpa

我可以毫无问题地使用带注释的命名查询。但是当我尝试切换到 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/

相关文章:

Java EE 应用程序由于内存消耗而在 WAS 7.0 上挂起

java - 如何使用 Spring Boot SPEL 以编程方式读取/解析 yaml 值?

mysql - 如何阻止 HSQL 被使用?

java - Hibernate搜索faceting,如何返回facet查询Spring MVC

java - 如何在java中提取特定字符串之间的字符串。使用 itext 添加提取的字符串以使其成为粗体

java - startActivity() 强制关闭我的应用程序

java - weblogic log4j.xml 更改记录器的 "level value"(即时)

xml - xpath:获取没有 X 祖先的节点

c# - 如何使用 XmlWriter 将 System.Xml.Linq.XElement 写入流

java - 同一个类上注解Entity和Component是不是错了