一个Group中有多个User,这种情况下 Group是一方,User是多方。你的描述错了吧?
要一方主控的话,可以在一方设置 inverse="false",在多方设置 inverse="true"你的配置文件也不对。你到底是Group里面存放的是User对象还是String的name字段啊?如果存放的是String的name字段,那么就不是什么一对多。兄台,你好像没有搞清楚什么是一对多吧?给个简单例子,Group里面有多个User,这里是Group和User对应的java代码:public class User implements Serializable { private static final long serialVersionUID = 7641099162123257707L;

private Long id;

private String name; public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return this.name;
} public void setName(String name) {
this.name = name;
}
}public class Group implements Serializable { private static final long serialVersionUID = 4633572225081179468L; private Long id;

private Set<User> users; public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public Set<User> getUsers() {
return this.users;
} public void setUsers(Set<User> users) {
this.users = users;
}
}那么,他们对应的hibermate配置文件相关部分应该是:
<hibernate-mapping package="fred.test">
<class name="Group" table="TGroup" lazy="true">
    <id name="id" type="long" column="ID">
    <generator class="native">
    <param name="sequence">S_FSWorkOrder</param>
    </generator>
    </id>
        <set name="users" table="TGroup_User" inverse="false">
            <key column="groupId"/>
            <many-to-many column="userId" unique="true" class="User"/>
        </set>
</class>
</hibernate-mapping><hibernate-mapping package="fred.test">
<class name="User" table="TUser">
<id name="id" type="long" column="id">
<generator class="native">
                <param name="sequence">S_User</param>
            </generator>
    </id>
        <join table="TGroup_User" inverse="true"> 
            <key column="userId"/>
            <many-to-one name="group" column="groupId" not-null="true" />
        </join>
</class>
</hibernate-mapping>

解决方案 »

  1.   

    呵呵,我一直使用的oracle,所以那个id也就声明成了sequence。你可以根据你使用的数据库来修改
      

  2.   

    hibernate提供了分页的api。类似于这样:Query query = session.createQuery(hqlString);
    query.setFirstResult(startPos);
    query.setMaxResults(amount);
    List results = query.list();这个results里面就是分页后的结果集。
    其中,startPos指的是你要取得的那一页的第一个纪录的序号,amount指的是这一页要取出的纪录的个数,也就是每页的大小