Person.java:
public class Person implements java.io.Serializable {
private int id;
private String fullName;
public Person() {
}
public Person(int id, String fullName) {
this.id = id;
this.fullName = fullName;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
}
ProjectGroup.java:
public class ProjectGroup implements java.io.Serializable {
private int id;
private Set<Person> persons = new HashSet<Person>(0);
private String name;
/**
* Get the value of name
*
* @return the value of name
*/
public String getName() {
return name;
}
/**
* Set the value of name
*
* @param name new value of name
*/
public void setName(String name) {
this.name = name;
}
public ProjectGroup() {
}
public ProjectGroup(int id, String name, Set<Person> persons) {
this.id = id;
this.name = name;
this.persons = persons;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public Set<Person> getPersons() {
return this.persons;
}
public void setPersons(Set<Person> persons) {
this.persons = persons;
}
}
Person.hbm.xml:
<hibernate-mapping>
<class name="com.mycompany.Person" table="person" schema="public">
<id name="id" type="int">
<column name="id" />
<generator class="identity" />
</id>
<property name="fullName" type="string">
<column name="full_name" length="128" not-null="true" />
</property>
<set name="projectGroups" inverse="false" lazy="false" cascade="delete" table="group_person">
<key>
<column name="project_id" />
</key>
<many-to-many entity-name="com.mycompany.ProjectGroup">
<column name="group_id" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
ProjectGroup.hbm.xml:
<hibernate-mapping>
<class name="com.mycompany.ProjectGroup" table="project_group" schema="public">
<id name="id" type="int">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="32" not-null="true" />
</property>
<set name="persons" inverse="false" table="group_person">
<key>
<column name="group_id" />
</key>
<many-to-many entity-name="com.mycompany.Person">
<column name="project_id" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
我需要做的是加载具有特定组的所有用户。我知道如何用SQL做到这一点,但Hibernate等效于我。
答案 0 :(得分:1)
首先,添加到您Person
中声明的projectGroups
班级,Person.hbn.xml
。然后,使用此条件选择特定组的所有用户:
Criteria c = session.createCriteria(Person.class);
c.createAlias("projectGroups", "pg");
c.add(Restrictions.eq("pg.name", "project-name"));
或者这个HQL:
from Person as person
join person.projectGroups as pg
with pg.name = 'project-name'