2016-03-20 12 views
2

私は@Whereアノテーションを持つ2つのエンティティを持っています。最初はカテゴリです。@Where節が休止状態の結合クエリ内で動作しない

@Where(clause = "DELETED = '0'") 
public class Category extends AbstractEntity 

です。

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category") 
private Set<SubCategory> subCategories = Sets.newHashSet(); 

であり、2番目のエンティティはSubCategoryです。

@Where(clause = "DELETED = '0'") 
public class SubCategory extends AbstractEntity 

と対応する関係があります。

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "CATEGORY_ID") 
private Category category; 

以下のDaoメソッドを呼び出すときはいつでも。

@Query(value = "select distinct category from Category category join fetch category.subCategories subcategories") 
public List<Category> findAllCategories(); 

次のSQLクエリがあります。上記のクエリは

とsubcategor1_.DELETED =を欠いなぜ

select 
     distinct category0_.id as id1_3_0_, 
     subcategor1_.id as id1_16_1_, 
     category0_.create_time as create2_3_0_, 
     category0_.create_user as create3_3_0_, 
     category0_.create_userip as create4_3_0_, 
     category0_.deleted as deleted5_3_0_, 
     category0_.update_time as update6_3_0_, 
     category0_.update_user as update7_3_0_, 
     category0_.update_userip as update8_3_0_, 
     category0_.version as version9_3_0_, 
     category0_.name as name10_3_0_, 
     subcategor1_.create_time as create2_16_1_, 
     subcategor1_.create_user as create3_16_1_, 
     subcategor1_.create_userip as create4_16_1_, 
     subcategor1_.deleted as deleted5_16_1_, 
     subcategor1_.update_time as update6_16_1_, 
     subcategor1_.update_user as update7_16_1_, 
     subcategor1_.update_userip as update8_16_1_, 
     subcategor1_.version as version9_16_1_, 
     subcategor1_.category_id as categor11_16_1_, 
     subcategor1_.name as name10_16_1_, 
     subcategor1_.category_id as categor11_3_0__, 
     subcategor1_.id as id1_16_0__ 
    from 
     PUBLIC.t_category category0_ 
    inner join 
     PUBLIC.t_sub_category subcategor1_ 
      on category0_.id=subcategor1_.category_id 
    where 
     (
      category0_.DELETED = '0' 
     ) 

あなたは私を教えてくださいでした '0'

をその場所ブロックの内側?

答えて

0

これは簡単な返信です。

@Where(clause = "DELETED = '0'") 
public class SubCategory extends AbstractEntity 

Where SubCategryための際の直接クエリに影響します。私はちょうど私のプロジェクトで同様の問題を解決したhere

2

にexampledとして するために削除されませサブカテゴリーがHibernate Filters を使用しています。

@WhereアノテーションはEntityだけでなく、あなたの子コレクションにも置くことができます。 javadocによると

句が要素エンティティに追加したり、あなたのケースでは、コレクション

エンティティをターゲットに、それはのようになる

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category") 
@Where(clause = "DELETED = '0'") 
private Set<SubCategory> subCategories = Sets.newHashSet(); 

同様の問題が解決されたことをご確認くださいhere

これらのフィルタは、デフォルトでは無効になっており、セッションレベルで動作するため、新しいセッションが開くたびに有効になります。特に、DAOがSpringのような抽象化データ