簡體   English   中英

如何將它們加入到Hibernate HQL查詢或Criteria API調用中?

[英]How would I join these in a Hibernate HQL query or Criteria API call?

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相當的東西使我難以理解。

首先,將在Person.hbn.xml聲明的屬性projectGroups添加到Person類。 然后,使用此條件選擇特定組的所有用戶:

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM