如果集合包含集合,则为hibernate条件

时间:2013-03-29 10:50:31

标签: database hibernate hql hibernate-criteria restriction

我有一个Priv级

@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有很多关系的Report类,包含一组相关的Privs - privs。

@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

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

带有代码{“code1”“的私人的报告应该是结果,但是 带有代码{“code1”,“code2”,“code3”}的priv的报告不应该。

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

1 个答案:

答案 0 :(得分:0)

此代码应该可以使用

    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;
    }