【问题标题】:Hibernate - add condition to @ManyToMany collectionHibernate - 向@ManyToMany 集合添加条件
【发布时间】:2015-08-06 00:37:53
【问题描述】:

我有一个关于休眠 @ManyToMany 关系的问题。首先,假设我有UserPositionManyToMany 关系。这是User 中的Position 集合:

@JoinTable(name = "user_position", joinColumns = {
    @JoinColumn(name = "user_id", referencedColumnName = "id")}, inverseJoinColumns = {
    @JoinColumn(name = "position_id", referencedColumnName = "id")
})
@ManyToMany(fetch = FetchType.LAZY)
@OrderBy("id ASC")
private Collection<Position> positionCollection;

我使用了@OrderBy("id ASC"),所以当我调用user.getPositionCollection()时,结果将按id排序。现在我的问题是如何向集合添加条件? 例如这样的:

@OrderBy("id ASC")
@Condition("id > 10")
private Collection<Position> positionCollection;

编辑:

我用这种方式测试了@Where注解(注意deleted是布尔值):

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
@Where(clause = "deleted = false")
private Collection<Position> positionCollection;

这会返回一个错误“where 子句”中的未知列“positi0_.false”

【问题讨论】:

    标签: java hibernate orm many-to-many


    【解决方案1】:

    您的问题是 false 被识别为列名。
    试试@Where(clause = "deleted = 'false'")

    祝你好运!

    【讨论】:

    • 这适用于我的 postgresql。但我不确定这是否适用于没有额外布尔支持的 mysql 和其他驱动程序。在那种情况下,@mharray 的答案可能是正确的。
    【解决方案2】:

    我不知道这样的配置。不过你可以看看Hibernatefilters

    【讨论】:

      【解决方案3】:

      @Where 注释将原生 SQL 作为字符串,因此假设您的布尔字段作为 int 或位存储在数据库中,您需要执行 @Where(clause = "deleted = 0")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 1970-01-01
        相关资源
        最近更新 更多