1

私はプライベートクラスを持っています

@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"" の権限を持つレポートは結果になるはずですが、コード {"code1", "code2", "code3"} の権限を持つレポートは結果にならないはずです。

Priv と Report を結合したクラスもありますが、それが役立つかどうかはわかりません。

4

1 に答える 1

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;
    }
于 2013-03-29T14:58:38.837 に答える