0

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

}

项目组.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;
    }

}

人.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>

项目组.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 等价物却让我望而却步。

4

1 回答 1

1

首先,将PersonprojectGroups您的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'
于 2012-09-04T22:30:44.573 回答