用户登录
用户注册

分享至

hibernate 用户表

  • 作者: 爱冰冰
  • 来源: 51数据库
  • 2020-10-15

你Group实体类的id是设置的自动增长,且配置的是级联保存吧。给“经理”组添加第二个User对象时,应该将group.setId()要设置成“经理”组的id.

追问:

我设置级联是all,比如说“经理”里面有个ID是1,我在插入第二个User的时候,将group.setId(1),插入数据,但是,数据插入成功了,"经理",这个组里ID为一的值变成NULL了

追答:

把xml配置或者注解方式的配置贴出来吧

追问:

group配置


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC 

 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 <class name="com.bjsxt.hibernate.Group" table="t_group">

  <id name="id">

   <generator class="native"/>

  </id>

  <property name="name"/>

 </class>

</hibernate-mapping>


 


user配置


<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC 

 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

" http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

 <class name="com.bjsxt.hibernate.User" table="t_user">

  <id name="id">

   <generator class="native"/>

  </id>

  <property name="name"/>

  

  <many-to-one name="group" column="groupid" cascade="all"/>

  <!--  

   <many-to-one name="group" column="groupid"/>

   -->

 </class>

</hibernate-mapping>


 


 


hibernate配置


<!DOCTYPE hibernate-configuration PUBLIC

 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

" http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">


<hibernate-configuration>

 <session-factory>

  <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate_many2one</property>

  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

  <property name="hibernate.connection.username">root</property>

  <property name="hibernate.connection.password">123456</property>

  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

  <property name="hibernate.show_sql">true</property>

  

  <mapping resource="com/bjsxt/hibernate/User.hbm.xml"/>

  <mapping resource="com/bjsxt/hibernate/Group.hbm.xml"/>

 </session-factory>

</hibernate-configuration>


 


运行的代码:


public void testSave3() {

  Session session = null;

  try {

   session = HibernateUtils.getSession();

   session.beginTransaction();

   

   Group group = new Group();

   group.setName("经理");

   

   User user1 = new User();

   user1.setName("小菜");

   user1.setGroup(group);

   

   User user2 = new User();

   user2.setName("容祖儿");

   user2.setGroup(group);

   

   //不会抛出异常,因为采用了cascade属性,所以它会先保存Group

   //采用cascade属性是解决TransientObjectException异常的一种手段   

   session.save(user1);

   session.save(user2);

   session.getTransaction().commit();

  }catch(Exception e) {

   e.printStackTrace();

   session.getTransaction().rollback();

  }finally {

   HibernateUtils.closeSession(session);

  }

 } 

追答:

上述方式由于没有设定Group的ID,它会生成两个组,这两个组ID分别使用自增长方式插入到数据库中。


假设你现在有Goup的id为1组,用如下代码试一试:


Session session = null;

  try {

   session = HibernateUtils.getSession();

   session.beginTransaction();

   

   Group group = session.get(Group.class,1);



   User user1 = new User();

   user1.setName("小菜");

   user1.setGroup(group);

   

   User user2 = new User();

   user2.setName("容祖儿");

   user2.setGroup(group);

 session.getTransaction().commit();

  }catch(Exception e) {

   e.printStackTrace();

   session.getTransaction().rollback();

  }finally {

   HibernateUtils.closeSession(session);

  }

 } 


软件
前端设计
程序设计
Java相关