orm.xmlでjpaとhibernateを使用して名前付きクエリを定義する 質問する

orm.xmlでjpaとhibernateを使用して名前付きクエリを定義する 質問する

名前付きクエリを orm.xml (persistence.xml とともに META-INF に配置) に配置しようとしていますが、orm.xml は hibernate/jpa によって無視されるようです。

em.createNamedQuery("myQuery") を使用して名前付きクエリを作成しようとすると、このクエリが見つからないというメッセージが返されます。

私はアノテーションを使用しており、名前付きクエリを orm.xml で外部化したいと考えています (それだけです)。

私の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>

これが私の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>

何が間違っているのでしょうか? orm.xml が無視されるのはなぜですか?

ありがとう

ベストアンサー1

よし、やっとわかった!

私は orm.xml を META-INF ディレクトリに保存していました。このファイルをドメイン オブジェクトがあるパッケージ (例では com.mysite) に移動すると、orm.xml は無視されず、すべて実行されます。

マッピングファイル (persistence.xml) のパスも変更する必要があります: com/mysite/orm.xml

おすすめ記事