define named query in orm.xml with jpa and hibernate

hibernate, java, jpa, named-query, orm

Solution

Ok I finally got it !

I was saving my orm.xml in META-INF directory. When I move this file to my package where I have my domain object (like in my example: com.mysite), the orm.xml is not ignored and all run.

I also need to change the path in mapping-file (persistence.xml) : com/mysite/orm.xml

Problem

I'm trying to put my named queries in my orm.xml (put in META-INF with persistence.xml) but my orm.xml seems to be ignored by hibernate/jpa. When I try to create my named query with em.createNamedQuery("myQuery"), it returns that it can't find this query. I use annotation and I would like to externalize my named queries in orm.xml (only that). Here is my persistence.xml: ``` <?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" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="default" transaction-type="RESOURCE_LOCAL"> <mapping-file>META-INF/orm.xml</mapping-file> <class>com.mysite.Account</class> <properties> <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" /> <property name="hibernate.cache.use_query_cache" value="true" /> <property name="hibernate.cache.use_second_level_cache" value="true" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" /> <property name="use_sql_comments" value="false" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MYSQLDialect" /> <property name="hibernate.c3p0.min_size" value="5" /> <property name="hibernate.c3p0.max_size" value="20" /> <property name="hibernate.c3p0.timeout" value="300" /> <property name="hibernate.c3p0.max_statements" value="50" /> <property name="hibernate.c3p0.idle_test_period" value="3000" /> <property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider" /> </properties> </persistence-unit> </persistence> ``` here is my 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_1_0.xsd" version="1.0"> <package>com.mysite</package> <entity class="Account"> <sql-result-set-mapping name="nicknames"> <column-result name="nickname" /> </sql-result-set-mapping> <table name="Account" /> <named-native-query name="myQuery" result-set-mapping="nicknames"> <query><![CDATA[select a.nickname from Account a]]> </query> </named-native-query> </entity> </entity-mappings> ``` What I'm doing wrong ? Why my orm.xml is ignored ? thanks

Original source