【问题标题】:Hibernate soft delete is not using @Where clause of relationshipsHibernate 软删除未使用关系的@Where 子句
【发布时间】:2012-03-15 21:12:40
【问题描述】:

我在带有软删除的 Java/Spring/Struts2 项目中使用休眠。我有两个实体的关系,我希望当我从数据库加载第一个实体时,如果相关的实体被删除,它将不会被加载。

第一个实体的注解是:

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "users")
@SQLDelete(sql = "UPDATE users SET active = '0' WHERE id_user = ?")
@Where(clause = "active = '1'")
public class User {

这是映射关系

@Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
@ManyToOne
@JoinColumn(name = "id_social_data")
@Where(clause = "active = '1'")
public SocialData getSocialData() {
    return socialData;
}

以及第二个实体的映射

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "social_datas")
@SQLDelete(sql = "UPDATE social_datas SET active = '0' WHERE id_social_data = ?")
@Where(clause = "active = '1'")
public class SocialData

我启用了休眠查询日志,得到了这个

 select
    this_.id_user as id1_24_8_,
    this_.active as active24_8_,
.....
    socialdata5_.id_social_data as id1_18_3_,
    socialdata5_.active as active18_3_,
    .....
from
    users this_ 
    .....

left outer join
    social_datas socialdata5_ 
        on this_.id_social_data=socialdata5_.id_social_data 
    .....

where
    (
        this_.active = '1'
    ) 
    and this_.username=? 
    and this_.password=?

我错误地期待另一个“where”子句?为什么休眠不使用

where
    (
        this_.active = '1'
        and socialdata5_.active = '1'
    ) 

提前致谢,欢迎任何想法。

【问题讨论】:

  • 我仍然不知道这是否可行,我正在手动处理此问题,但任何想法或指向正确文档 /bug / 票证的链接都会有所帮助。跨度>
  • 您还必须注释与@Where(clause = "active = '1'") 的关系。但是,我不太喜欢这种解决方案,因为它可能容易出错且不易维护。特别是如果你有很多关系。
  • 嗨@miguelcobain。第二个代码块是关系映射,已经有了`@Where注解`。尽管如此,我还是放弃了软删除,因为它只是问题的根源,我最终让用户在应用程序中手动更改活动标志。还是谢谢你
  • 糟糕,很抱歉没有注意到。我也开始放弃了。

标签: hibernate jpa annotations


【解决方案1】:

在休眠错误跟踪器上报告了一个错误/功能 - 它是从 2007 年开始的:

https://hibernate.atlassian.net/browse/HHH-2737

https://hibernate.atlassian.net/browse/HHH-4335

@Where 与 @OneToMany 一起工作正常,但它不适用于 @ManyToOne。

【讨论】:

    猜你喜欢
    • 2019-07-09
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多