2013-03-29 3 views
1

У меня есть класс Privкритерии Hibernate, если коллекция содержит коллекцию

@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; 
//... 
} 

и отчет о классе, который имеет многие ко многим отношений с собствами и содержит множество связанного 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 (код Первичный ключ в собств).

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

мне нужен критерий, который позволит мне найти, что отчеты, которые все коды из множества ее собств содержат в privsCodesSet. Например, если у меня есть privsCodeSet = {"code1", "code2"}

Сообщить о наличии привилегий с кодом {"code1" "должно быть в результате, но Сообщить о наличии привилегий с кодами {" code1 "," code2 " , «code3»} не должен.

у меня также есть класс, который является объединением Priv и отчета, но я не уверен, если это поможет.

+0

Я пытался что-н, как это:. Критерии reportPrivCriteria = currentSession() createCriteria ( \t \t \t \t Report.class, "г"); \t \t reportPrivCriteria.createCriteria ("privs", "p"); reportPrivCriteria.add (Resstriction.in (p.code, privsCodeSet)) – biesczadka

ответ

0

Этот код должен работать

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

Do у вас есть что-то подобное в вашем классе Priv?

private Set<Report> reports; 

    // ... 

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

 Смежные вопросы

  • Нет связанных вопросов^_^