【问题标题】:hibernate criteria if collection contains collection如果集合包含集合,则休眠条件
【发布时间】:2013-03-20 01:38:52
【问题描述】:

我有一个私人课程

@Entity
@Table(name = "PK_PRIVS", schema = "dbo")
public class Priv implements java.io.Serializable{

private static final long serialVersionUID = 1L;
private String code;
private String name;
private String description;
private PrivType type;
//...
} 

还有一个与 Priv 有多对多关系并包含一组关联 Privs - privs 的 Report 类。

@Entity
@Table(name = "REPORT", schema = "dbo")
public class Report implements java.io.Serializable {

//...

private Set<Priv> privs = new HashSet<Priv>(0);

//...

@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "REPORT_PK_PRIVS", schema = "dbo", joinColumns = { @JoinColumn(name = "REPORT_ID") }, inverseJoinColumns = { @JoinColumn(name = "PK_PRIVS_CODE") })
public Set<Priv> getPrivs() {
    return this.privs;
}

public void setPrivs(Set<Priv> privs) {
    this.privs = privs;
}



}

现在我有一组字符串,它们是 Priv 类的代码(代码是 Priv 中的主键)。

Set<String> privsCodesSet; //set of codes of Priv classes

我需要一个允许我找到报告的标准,它的 Priv 集中的所有代码都包含在 privsCodesSet 中。例如,如果我有 privsCodeSet = {"code1", "code2"}

带有代码 {"code1"" 的 privs 报告应该在结果中,但是 不应使用代码 {"code1", "code2", "code3"} 的 privs 报告。

我也有加入 Priv 和 Report 的课程,但我不确定它是否有帮助。

【问题讨论】:

  • 我试过这样的:Criteria reportPrivCriteria = currentSession().createCriteria(Report.class, "r"); reportPrivCriteria.createCriteria("privs", "p");reportPrivCriteria.add(Resstriction.in(p.code, privsCodeSet))

标签: database hibernate hibernate-criteria restriction


【解决方案1】:

这段代码应该可以工作

    Criteria reportPrivCriteria = currentSession()
        .createCriteria( Report.class, "r");
    reportPrivCriteria.createAlias("privs", "p");
    reportPrivCriteria.add(Restrictions.in(p.code, privsCodeSet));

你的 Priv 课上有这样的东西吗?

    private Set<Report> reports;

    // ...

    @ManyToMany(mappedBy="privs")
    public Collection<Report> getReports() {
         return reports;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 2011-03-26
    • 2018-03-01
    • 2011-02-25
    • 2011-12-02
    • 2020-07-29
    • 2017-01-03
    • 1970-01-01
    相关资源
    最近更新 更多