【问题标题】:Filtering non-primitive types with hibernate使用休眠过滤非原始类型
【发布时间】:2017-12-25 18:14:24
【问题描述】:

在我的数据库中,我不删除对象。而是完成了软删除。表示将 delted 标志设置为 true。这应该由休眠使用@Filter 注释过滤。 这可行,但我遇到的问题是字段没有被过滤。

例如,我有一个子类和一个包含子类的父类。如果子对象被删除并且父对象被加载,则父对象包含子对象(尽管已正确设置已删除标志)。但我希望像处理集合一样过滤子对象。 有没有办法做到这一点?

我试着把这个领域当作收藏品,但这对我不起作用。

@Entity
@FilterDef(name = deletedFilter, parameters = @ParamDef(name = deletedParam, type = "boolean"))
@Filter(name = deletedFilter, condition = ":deletedParam = deleted")
public class Child {}


@Entity
public class Parent {
    @OneToOne
    @Filter(name = deletedFilter, condition = ":deletedParam = deleted")
    private Child child = new Child();
} 

【问题讨论】:

  • 您不应该在集合中添加@OneToMany 吗?
  • 是的,你是对的。我会改变它 :-) 但是因为在我的代码中它是正确的,所以这不会改变行为。

标签: java hibernate soft-delete


【解决方案1】:

休眠过滤器不适用于@OneToOne 关系。

https://hibernate.onjira.com/browse/HHH-4026

解释是关于问题的 cmets:过滤器会改变关系的基数。

【讨论】:

  • 好的,谢谢您的回答。然后我必须找到另一个解决方案。
  • 好的,最新版本的 JPA 有什么变化吗?请提供一个工作链接。上面的链接失效了。
【解决方案2】:

如果布尔标志不起作用,您可以改用 整数 值。并且可以进行相应的检查。

【讨论】:

    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多