有两个实体对象,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,请大侠指点。

解决方案 »

  1.   

    Group group1=new Group();
    roup1.setId(1);  //设置了id,应该是托管对象吧
                 
    session.update(group1);          
    User user1=new User();  //瞬时对象
                 
    user1.setUsername("李四");
    user1.setAge(21);user1.setGroup(group1);
    session.save(user1);
    红色那句有问题
      

  2.   

    把 session.update(group1);   这句去掉,结果是一样的
      

  3.   

     session.update(group1);          这句没用,同上,