2010-12-16 16 views
0

私はHibernateを使用しています。Hibernateクエリの問題

カテゴリーは多くの属性

クラスカテゴリ は、私が 'しようとしていますので、私はそれらの属性と一緒にすべてのカテゴリを取得するにはどうすればよい

private Set <Attribute> AllAttributes= new HashSet <Attribute>(); 

クラス属性

が含まれているを持っているし、次のように私のデータベースですカテゴリから 'しかし、それは動作していません

カテゴリマッピングファイル:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Dec 16, 2010 8:37:02 AM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="com.BiddingSystem.Models.Category" table="CATEGORY"> 
     <id name="CategoryId" type="long"> 
      <column name="CATEGORYID" /> 
      <generator class="native" /> 
     </id> 
     <property name="CategoryName" type="java.lang.String"> 
      <column name="CATEGORYNAME" /> 
     </property> 

     <many-to-one name="ParentCategory" class="com.BiddingSystem.Models.Category"> 
      <column name="PARENT_CATEGORY_ID" /> 
     </many-to-one> 

     <set name="SubCategory" lazy="false" cascade="all-delete-orphan" inverse="true"> 
      <key> 
       <column name="PARENT_CATEGORY_ID" /> 
      </key> 
      <one-to-many class="com.BiddingSystem.Models.Category" /> 
     </set> 

     <set name="AllAttributes" table="ATTRIBUTE" inverse="false" lazy="true" cascade="all"> 
      <key> 
       <column name="CATEGORYID" /> 
      </key> 
      <one-to-many class="com.BiddingSystem.Models.Attribute" /> 
     </set> 

    </class> 
</hibernate-mapping> 

マッピングファイル属性:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Dec 16, 2010 5:25:09 AM by Hibernate Tools 3.4.0.Beta1 --> 
<hibernate-mapping> 
    <class name="com.BiddingSystem.Models.Attribute" table="ATTRIBUTE"> 
     <id name="AttributeId" type="long"> 
      <column name="ATTRIBUTEID" /> 
      <generator class="native" /> 
     </id> 
     <property name="AttributeName" type="java.lang.String"> 
      <column name="ATTRIBUTENAME" /> 
     </property> 
     <set name="Options" table="ATTRIBUTEOPTION" inverse="false" cascade="all"> 
      <key> 
       <column name="ATTRIBUTEID" /> 
      </key> 
      <one-to-many class="com.BiddingSystem.Models.AttributeOption" /> 
     </set> 
    </class> 
</hibernate-mapping> 
+1

"not working"を定義しますか?あなたのマッピングファイル/マッピングアノテーションは何ですか? – meriton

答えて

2

あなたはlazy="true"との関連をマッピングしました。これは、カテゴリをロードするたびに属性をロードするようにhibernateに指示するlazy="false"とは対照的に、デフォルトでカテゴリの属性は実際にアクセスされたときにのみデータベースからロードされるべきであることを休止状態に伝えます。ただし、マッピングファイルのディレクティブはすべてのクエリに影響します。あなたが唯一の特定のクエリのためにそれをしたい場合は

http://docs.jboss.org/hibernate/core/3.5/reference/en/html/queryhql.html#queryhql-joinsをチェックアウト:

に参加する「フェッチは、」団体または値の コレクションが使用して、親 オブジェクトと に沿って初期化することを可能にしますシングルセレクトこれは、 コレクションの場合に特に便利です です。これは、 アソシエーションのマッピングファイルの外部結合および遅延宣言 とコレクションを効果的にオーバーライドします。 の詳細については、セクション20.1、 「フェッチ戦略」を参照してください。

from Cat as cat 
    inner join fetch cat.mate 
    left join fetch cat.kittens 

関連するオブジェクトがwhere句(または任意の他の 句)で を使用すべきではないので、Aは、通常別名を割り当てる する必要がない参加フェッチ。関連するオブジェクトは で、 の照会結果に直接戻されることもありません。代わりに、親オブジェクトを介してアクセスされる である可能性があります。あなたは再帰的 さらにコレクションをフェッチ参加している場合は、別名が必要な場合があります 唯一の理由は です:

from Cat as cat 
    inner join fetch cat.mate 
    left join fetch cat.kittens child 
    left join fetch child.kittens 

構築物は(反復を使用して呼び出さ クエリで使用することはできませんフェッチ)(ただし スクロール()することができます利用される)。これらの操作 としてはsetMaxResults()または setFirstResultメソッド()と一緒に使用 を、あるべきフェッチ は通常、熱心 コレクションフェッチのための重複が含まれている結果の行に基づいており、したがって、行数 は、あなたが期待するものではありません。 Fetchも一緒に使用しないでください。 は条件付きの即興です。クエリーに コレクションを1つ以上フェッチするジョインによってデカルト製品 を作成することは可能ですので ですので、 に注意してください。複数の 収集ロールをフェッチすると、 バッグマッピングの予期しない結果が発生する可能性があります。 この場合、 クエリを作成すると、ユーザーの裁量が助長されます。 最後に、完全結合フェッチと 右結合フェッチは意味がありません。

関連する問題