Hibernate (一对一/一对多)单向连接表关联 能不能在“一”的一方进行维护阿?

yuantongaaaaaa 2007-10-28 06:51:25
我做了一个程序,有两个对象,User(为"一"),Group(为"多"),一个Group中有多个User
Group.hbm.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="oo.Group" table="group8">
<id name="id" column="id" type="integer">
<generator class="identity" />
</id>
<property name="name" column="name" type="string"></property>

<join table="user8_join_group8">
<key column="groupId" unique="true" />
<many-to-one name="user" column="userId" cascade="all" unique="true"/>
</join>
</class>
</hibernate-mapping>

user.hbm.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="oo.User" table="user12" >
<id name="id" column="id" type="integer">
<generator class="identity" />
</id>
<property name="name" column="name" type="string"></property>

</class>
</hibernate-mapping>

这样肯定是没有问题,我程序中用session.save(group)就可以了,
但是现在我想如果我在User.hbm.xml当中做主控方,在程序中用session.save(user)。那么User.hbm.xml改怎么写呢?
还能和Group.hbm.xml一样吗?
...全文
446 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
FredWorks 2007-11-03
  • 打赏
  • 举报
回复
hibernate提供了分页的api。类似于这样:

Query query = session.createQuery(hqlString);
query.setFirstResult(startPos);
query.setMaxResults(amount);
List results = query.list();

这个results里面就是分页后的结果集。
其中,startPos指的是你要取得的那一页的第一个纪录的序号,amount指的是这一页要取出的纪录的个数,也就是每页的大小
isoftware 2007-11-03
  • 打赏
  • 举报
回复
请问怎么对取得的信息进行分页阿
xiaolipost2007 2007-11-02
  • 打赏
  • 举报
回复
Up
FredWorks 2007-11-02
  • 打赏
  • 举报
回复
呵呵,我一直使用的oracle,所以那个id也就声明成了sequence。你可以根据你使用的数据库来修改
FredWorks 2007-11-02
  • 打赏
  • 举报
回复
一个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>


67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧