HQLという名前のクエリを外部ファイルに外部化する方法はありますか?私はあまりにも多くの名前付きクエリがあり、@NamedQueries
と@NamedQuery
を私のエンティティクラスの頭に使っています。名前付きクエリをHibernateアノテーションアプリケーションで外部化するにはどうすればよいですか?
複数のファイルに外部化する方法はありますか?
HQLという名前のクエリを外部ファイルに外部化する方法はありますか?私はあまりにも多くの名前付きクエリがあり、@NamedQueries
と@NamedQuery
を私のエンティティクラスの頭に使っています。名前付きクエリをHibernateアノテーションアプリケーションで外部化するにはどうすればよいですか?
複数のファイルに外部化する方法はありますか?
あなたがルート、たとえば、で、package-info.java
クラスにクエリを置くことができますあなたのドメインオブジェクトのパッケージしかし、javax.persistence
のものではなく、Hibernate独自の@NamedQueries
と@NamedQuery
の注釈を使用する必要があります。
例package-info.java
ファイル:
@org.hibernate.annotations.NamedQueries({
@org.hibernate.annotations.NamedQuery(
name = "foo.findAllUsers",
query="from Users")
})
package com.foo.domain;
その後、あなたはあなたのAnnotationConfiguration
にパッケージを追加する必要があります。私はそこにそれがannonatedPackages
プロパティを設定することの問題だ、春を使用して:あなたはまた、同様に同じファイルタイプやフィルタの定義を置くことができます
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
<list>
...
</list>
</property>
<property name="annotatedPackages">
<list>
<value>com.foo.domain</value>
</list>
</property>
。
私は、注釈属性/プロパティ値がコンパイル時に利用可能でなければならないので、これは可能ではないと思います。したがって、ある種のプロセスによって読み込まれる必要があるファイルに文字列を外部化することはできません。
package-info.javaが提供できるかもしれないものがあれば見つけようとしましたが、何も見つかりませんでした。
組織の別の戦略として、クエリを定数としてクラスに格納することができます。
エンティティ・クラスで:
@NamedQuery(name="plane.getAll", query=NamedQueries.PLANE_GET_ALL)
その後、あなたの質問定数のためのクラスを定義します。
public class NamedQueries {
...
public static final String PLANE_GET_ALL = "select p from Plane p";
...
}
このソリューションはNamedQueriesの外部化に関するものではありません、あなただけのクラスのプレーンな文字列プロパティにそれらを回っています。意味は失われます。 – Augusto
は多分これは(非Javaファイルに外部化する)ためにどのような著者が尋ね正確ではありませんが、これは私がそれに解決する方法である:私はSessionFactoryの
にmappingResources
を追加しました私のアプリケーションコンテキストxmlファイルに
1.)私は名前付きクエリを定義するには、エンティティのその他の構成はannotatであることを使用
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>META-INF/Country.hbm.xml</value>
</list>
</property>
<property name="annotatedClasses">
<util:list>
<value>com.example.Country</value>
</util:list>
</property>
<property name="hibernateProperties" ref="hibernateProperties" />
</bean>
とそのCountry.hbm.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">
<entity class="com.example.Country">
<named-query name="countryFindByCode">
<query><![CDATA[
select c
from Country c
where c.code = :code
]]></query>
</named-query>
<named-query name="countryFindByName">
<query><![CDATA[
select c
from Country c
where c.name = :name
]]></query>
</named-query>
</entity>
</entity-mappings>
を持っていますイオン。
多分それが誰かを助けます。
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>META-INF/Country.hbm.xml</value>
</list>
</property>
<property name="annotatedCla
from Country c
where c.name = :name
]]></query>
</named-query>
</entity>
</entity-mappings>
少し詳しい説明は? –
私の見解では、これはクエリの外部化ではなく、クラスでコンパイルされていて、エンティティクラスで数十のクエリを持つこと、またはパッケージ情報クラスでさらに多くのクエリを持つことはエンティティを選択します。 IMHOこれはこの質問の正解ではありませんが、なぜそれが受け入れられるのかわかりません - > -1 – Betlista
+1私にとっては大丈夫です。 Java ConfigとXMLを使って外部化する方法を示しています。 downvotingの前に質問を読むと、彼はクラス内にNamedQueryを持たないことを明確に述べています。 – Augusto