Zaf*_*ncu 4 java sql spring hibernate hibernate-annotations
我有2个带有@Where注释的实体。第一个是类别;
@Where(clause = "DELETED = '0'")
public class Category extends AbstractEntity
Run Code Online (Sandbox Code Playgroud)
具有以下关系:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category")
private Set<SubCategory> subCategories = Sets.newHashSet();
Run Code Online (Sandbox Code Playgroud)
第二个实体是SubCategory;
@Where(clause = "DELETED = '0'")
public class SubCategory extends AbstractEntity
Run Code Online (Sandbox Code Playgroud)
并包含对应关系;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CATEGORY_ID")
private Category category;
Run Code Online (Sandbox Code Playgroud)
每当我调用以下Dao方法时;
@Query(value = "select distinct category from Category category join fetch category.subCategories subcategories")
public List<Category> findAllCategories();
Run Code Online (Sandbox Code Playgroud)
我得到以下sql查询;
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'
)
Run Code Online (Sandbox Code Playgroud)
您能否告诉我为什么缺少上述查询
和subcategor1_.DELETED ='0'
里面的哪里块?
我刚刚在我的项目中解决了类似的问题。
不仅可以在实体上添加@Where注释,还可以在子集合上添加@Where注释。
根据javadoc:
要添加到元素的Entity或集合的目标实体的 Where子句
就您而言,它就像:
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category")
@Where(clause = "DELETED = '0'")
private Set<SubCategory> subCategories = Sets.newHashSet();
Run Code Online (Sandbox Code Playgroud)
请在此处找到解决的类似问题
我相信这种解决方案与使用Hibernate过滤器相比没有那么侵入性。这些过滤器默认情况下处于禁用状态,并且在Session级别运行,因此每次打开新Session时启用它们都是额外的工作,尤其是当您的DAO通过Spring Data之类的抽象进行工作
这是一个快速回复;
@Where(clause = "DELETED = '0'")
public class SubCategory extends AbstractEntity
Run Code Online (Sandbox Code Playgroud)
Where直接查询SubCategry时生效。为了不删除子类别,请使用Hibernate Filters,如此处
所示
| 归档时间: |
|
| 查看次数: |
3960 次 |
| 最近记录: |