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

时间:2015-08-17 13:24:08

标签: java xml spring hibernate jpa

我可以使用注释来使用命名查询而不会出现任何问题。但是,当我尝试切换到 orm.xml 文件以外部化我的应用程序时,无法找到我在{class>}文件下的命名查询 META-INF 目录。我的User.orm.xml文件的完整路径是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.xml 看起来像这样,

src/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

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

我还在我的persistence.xml中包含了User.orm.xml文件的映射,该文件已经存在于META-INF目录下的类路径中。我尝试了以下文件映射,但没有一个检测到我的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>

1 个答案:

答案 0 :(得分:1)

您必须在<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