知识大全 Hibernate下实现数据的级联插入

Posted

篇首语:采得百花成蜜后,为谁辛苦为谁甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate下实现数据的级联插入相关的知识,希望对你有一定的参考价值。

Hibernate下实现数据的级联插入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在本文中主要实现数据的级联插入 下面模拟的场景是 用户有多个订单 在插入用户的时候 将用户的订单添加到订单表中

  下面是User 和 Order两个pojo类的代码

  [java]

  public class Order

  private int id;

  private int whoid;   // thi id of the order s User

  private User user;

  public User getUser()

  return user;

  

  public void setUser(User user)

  this user = user;

  

  public int getId()

  return id;

  

  public void setId(int id)

  this id = id;

  

  public int getWhoid()

  return whoid;

  

  public void setWhoid(int whoid)

  this whoid = whoid;

  

  

  public class Order

  private int id;

  private int whoid;   // thi id of the order s User

  private User user;

  public User getUser()

  return user;

  

  public void setUser(User user)

  this user = user;

  

  public int getId()

  return id;

  

  public void setId(int id)

  this id = id;

  

  public int getWhoid()

  return whoid;

  

  public void setWhoid(int whoid)

  this whoid = whoid;

  

  

  [java]

  public class User

  private int id;

  private String username;

  private String password;

  //这里需要注意的是使用集合必须使用Set 而不能用HashSet 否者在插入数据的时候会抛出一个参数不匹配异常

  private Set<Order> orders;

  public Set<Order> getOrders()

  return orders;

  

  public void setOrders(Set<Order> orders)

  this orders = orders;

  

  public int getId()

  return id;

  

  public void setId(int id)

  this id = id;

  

  public String getUsername()

  return username;

  

  public void setUsername(String username)

  this username = username;

  

  public String getPassword()

  return password;

  

  public void setPassword(String password)

  this password = password;

  

  

  public class User

  private int id;

  private String username;

  private String password;

  //这里需要注意的是使用集合必须使用Set 而不能用HashSet 否者在插入数据的时候会抛出一个参数不匹配异常

  private Set<Order> orders;

  public Set<Order> getOrders()

  return orders;

  

  public void setOrders(Set<Order> orders)

  this orders = orders;

  

  public int getId()

  return id;

  

  public void setId(int id)

  this id = id;

  

  public String getUsername()

  return username;

  

  public void setUsername(String username)

  this username = username;

  

  public String getPassword()

  return password;

  

  public void setPassword(String password)

  this password = password;

  

  

  下面这个是UserDao 这个就没有什么好说的了

  [java]

  import hibernate Session;

  import hibernate Transaction;

  import example domain User;

  public class UserDao

  private Session session;

  public UserDao(Session session )

  

  this session = session;

  

  public void savaUser(User user)

  

  Transaction tx = session beginTransaction();

  try

  

  session save(user);

  mit();

  

  catch(Exception ex)

  

  ex printStackTrace();

  tx rollback();

  

  

  

  import hibernate Session;

  import hibernate Transaction;

  import example domain User;

  public class UserDao

  private Session session;

  public UserDao(Session session )

  

  this session = session;

  

  public void savaUser(User user)

  

  Transaction tx = session beginTransaction();

  try

  

  session save(user);

  mit();

  

  catch(Exception ex)

  

  ex printStackTrace();

  tx rollback();

  

  

  

  下面的这两个hbm xml文件十分重要

  User hbm xml

  []

  <?xml version= encoding= UTF ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= example domain User table= user >

  <id name= id column= id type= java lang Integer >

  <generator class= increment ></generator>

  </id>

  <property name= username column= username type= java lang String ></property>

  <property name= password column= password type= java lang String ></property>

  <set name= orders cascade= save update inverse= false >

  <key column= whoid ></key>

  <one to many class= example domain Order />

  </set>

  </class>

  </hibernate mapping>

  <?xml version= encoding= UTF ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= example domain User table= user >

  <id name= id column= id type= java lang Integer >

  <generator class= increment ></generator>

  </id>

  <property name= username column= username type= java lang String ></property>

  <property name= password column= password type= java lang String ></property>

  <set name= orders cascade= save update inverse= false >

  <key column= whoid ></key>

  <one to many class= example domain Order />

  </set>

  </class>

  </hibernate mapping>

  其中要理解的就是set这个标签 这个标签对应了User对象中的集合对象 name依然是User中属性的名字 inserse为false表示了这种一对多的关系由User来维护 默认值就是false 那么那一方就有责任负责之间的关联关系 说白了就是hibernate如何生成Sql来维护关联的记录 比如说当User的状态发生了改变 这种改变会延伸到每一个关联到这个User的Order上

  key标签用来表明 这两个关系是通过那个属性来连接的 那么Order表中的外键是whoid 那么这两个关系是通过whoid来维护的 one to many表示一对多的关系 其中class表示Set集合中的对象类型 也可以这么理解 即一对多的关系 多的一方的类型是什么

  Order hbm xml

  []

  <?xml version= encoding= UTF ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= example domain Order table= Orders >

  <id name= id column= id type= java lang Integer >

  <generator class= increment ></generator>

  </id>

  <many to one name= user class= example domain User column= whoid ></many to one>

  </class>

  </hibernate mapping>

  <?xml version= encoding= UTF ?>

  <!DOCTYPE hibernate mapping PUBLIC

   //Hibernate/Hibernate Mapping DTD //EN

   hiber/hibernate mapping dtd >

  <hibernate mapping>

  <class name= example domain Order table= Orders >

  <id name= id column= id type= java lang Integer >

  <generator class= increment ></generator>

  </id>

  <many to one name= user class= example domain User column= whoid ></many to one>

  </class>

  </hibernate mapping>

  其中的 many to one 表示多对一的关系 name表示Order中表示用来关联用户的那个属性的名称 class表示一的那一方的类型 column表示关联关系中用来连接的列 这里仍然是whoid

  下面是测试代码

  [java]

  public class Test

  public static void main(String args[])

  

  User user = new User();

  user setUsername( Neway );

  user setPassword( admin );

  HashSet<Order> orders  = new HashSet<Order>();

  Order o = new Order();

  Order o = new Order();

  Order o = new Order();

  orders add(o );

  orders add(o );

  orders add(o );

  user setOrders(orders);

  Session session = HibernateSessionFactory getSession();

  UserDao dao = new UserDao(session);

  dao savaUser(user);

  

  

  public class Test

  public static void main(String args[])

  

  User user = new User();

  user setUsername( Neway );

  user setPassword( admin );

  HashSet<Order> orders  = new HashSet<Order>();

  Order o = new Order();

  Order o = new Order();

  Order o = new Order();

  orders add(o );

  orders add(o );

  orders add(o );

  user setOrders(orders);

  Session session = HibernateSessionFactory getSession();

  UserDao dao = new UserDao(session);

  dao savaUser(user);

  

cha138/Article/program/Java/ky/201311/28639

相关参考

知识大全 浅析Hibernate下数据批量处理方法

浅析Hibernate下数据批量处理方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多人都

知识大全 Hibernate下数据批量处理解决方案

Hibernate下数据批量处理解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多人都

知识大全 Hibernate的批量处理-批量插入

Hibernate的批量处理-批量插入  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hiber

知识大全 hibernate优化方案

  一批量修改和删除  在Hibernate中如果需要对任何数据进行修改和删除操作都需要先执行查询操作在得到要修改或者删除的数据后再对该数据进行相应的操作处理在数据量少的情况下采用这种处理方式没有问题

知识大全 解析Oracle中多表级联删除的方法

解析Oracle中多表级联删除的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!创建数据库时为了

知识大全 hibernate的性能优化

  Hibernate是对JDBC的轻量级封装因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低然而通过正确的方法和策略在使用Hibernate的时候还是可以非常接近直接使用JD

知识大全 hibernate大数据性能处理

   在项目中使用Hibernate进行大数据量的性能测试有一些总结   )在处理大数据量时会有大量的数据缓冲保存在Session的一级缓存

知识大全 Hibernate数据查询

Hibernate数据查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  HibernateQu

知识大全 Hibernate获取数据与缓存使用

Hibernate获取数据与缓存使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hibern

知识大全 数据结构考研分类复习真题 第九章 集合[31]

  对下面的阶B树依次执行下列操作画出各步操作的结果【合肥工业大学四(分)】  ()插入   ()插入  ()插入  ()删除&n