有两个实体对象,User 和Group,配置了多对一映射
如:
User.hbm.xml<hibernate-mapping package="cn.itcase.entity">
<class name="User" table="T_User">
<id name="id">
<generator class="increment" />
</id>
<property name="username" />
<property name="age" />
<many-to-one name="group" column="gid" cascade="all" />
</class>
</hibernate-mapping>
Group.hbm.xml<hibernate-mapping package="cn.itcase.entity">
<class name="Group" table="T_Group">
<id name="id">
<generator class="increment" />
</id>
<property name="groupname" />
</class>
</hibernate-mapping>
数据库中,
T_Group表
id groupname
1 一组T_User表
id username age gid
1 张三 18 1现在向T_User表插入第二条数据时,已经知道要插入t_user的该条记录的gid也是1
不知道该怎么插入,我不想先用 session.get(Group.class,1)查出id为1的组,再设置 user对象的group属性为查出的对象,如果这样的话,hiber会多发一条插询语句去查t_group表中,id为1的记录
public void test2(){
Configuration cfg=new Configuration().configure();
SessionFactory factory=cfg.buildSessionFactory();
Session session=null;
try{
session=factory.openSession();
session.beginTransaction();
Group group1=new Group();
group1.setId(1); //设置了id,应该是托管对象吧
session.update(group1);
User user1=new User(); //瞬时对象
user1.setUsername("李四");
user1.setAge(21);
user1.setGroup(group1);
session.save(user1);
session.getTransaction().commit();
}catch(HibernateException e){
session.getTransaction().rollback();
e.printStackTrace();
}finally{
session.close();
}
}如果直接这样save()的话,数据库会发送两条语句
Hibernate: insert into T_User (username, age, gid, id) values (?, ?, ?, ?)
Hibernate: update T_Group set groupname=? where id=?而我只想发送第一条语句,但是第二条语句将group中,原有的grupname清空了。初学hibernate,请大侠指点。
如:
User.hbm.xml<hibernate-mapping package="cn.itcase.entity">
<class name="User" table="T_User">
<id name="id">
<generator class="increment" />
</id>
<property name="username" />
<property name="age" />
<many-to-one name="group" column="gid" cascade="all" />
</class>
</hibernate-mapping>
Group.hbm.xml<hibernate-mapping package="cn.itcase.entity">
<class name="Group" table="T_Group">
<id name="id">
<generator class="increment" />
</id>
<property name="groupname" />
</class>
</hibernate-mapping>
数据库中,
T_Group表
id groupname
1 一组T_User表
id username age gid
1 张三 18 1现在向T_User表插入第二条数据时,已经知道要插入t_user的该条记录的gid也是1
不知道该怎么插入,我不想先用 session.get(Group.class,1)查出id为1的组,再设置 user对象的group属性为查出的对象,如果这样的话,hiber会多发一条插询语句去查t_group表中,id为1的记录
public void test2(){
Configuration cfg=new Configuration().configure();
SessionFactory factory=cfg.buildSessionFactory();
Session session=null;
try{
session=factory.openSession();
session.beginTransaction();
Group group1=new Group();
group1.setId(1); //设置了id,应该是托管对象吧
session.update(group1);
User user1=new User(); //瞬时对象
user1.setUsername("李四");
user1.setAge(21);
user1.setGroup(group1);
session.save(user1);
session.getTransaction().commit();
}catch(HibernateException e){
session.getTransaction().rollback();
e.printStackTrace();
}finally{
session.close();
}
}如果直接这样save()的话,数据库会发送两条语句
Hibernate: insert into T_User (username, age, gid, id) values (?, ?, ?, ?)
Hibernate: update T_Group set groupname=? where id=?而我只想发送第一条语句,但是第二条语句将group中,原有的grupname清空了。初学hibernate,请大侠指点。
解决方案 »
- Linux/Unix平台下开发java,用的都是什么版本Linux/Unix
- java 保存txt文件问题 在线等(急)
- apache和tomact连接后,怎样才能是部署在两台服务器上的工程都可以同时访问
- 求经典的struts入门书籍
- TOMCAT启动问题,
- 关于表示层(jsp)重用的问题。
- 装过J2EE SDK还需要装J2SE SDK吗?
- 关于用JavaBeans连数据源操作数据库的郁闷
- 请问如何将IP地址定向到某个固定文件
- 如何把一个CMP对应表的纪录装入内存?
- action怎样给s:iterator中的s:checkbox预赋值?
- strust2中,怎样在后台action中获取前台jsp中s:iterator中value中为#request.list的所有list对象的值?
roup1.setId(1); //设置了id,应该是托管对象吧
session.update(group1);
User user1=new User(); //瞬时对象
user1.setUsername("李四");
user1.setAge(21);user1.setGroup(group1);
session.save(user1);
红色那句有问题