2012-09-04 26 views
0

Person.java:我如何将这些加入到Hibernate HQL查询或Criteria API调用中?

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> 

我需要什么do是加载具有特定组的所有用户。我知道如何用SQL来完成这项工作,但Hibernate的等价物无法实现。

回答

1

首先,加入您的Person类,中声明的属性projectGroups。然后,用这个标准来选择某一组的所有用户:

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'