知识大全 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下数据批量处理方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 很多人都
Hibernate下数据批量处理解决方案 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 很多人都
Hibernate的批量处理-批量插入 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hiber
一批量修改和删除 在Hibernate中如果需要对任何数据进行修改和删除操作都需要先执行查询操作在得到要修改或者删除的数据后再对该数据进行相应的操作处理在数据量少的情况下采用这种处理方式没有问题
解析Oracle中多表级联删除的方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!创建数据库时为了
Hibernate是对JDBC的轻量级封装因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低然而通过正确的方法和策略在使用Hibernate的时候还是可以非常接近直接使用JD
在项目中使用Hibernate进行大数据量的性能测试有一些总结 )在处理大数据量时会有大量的数据缓冲保存在Session的一级缓存
Hibernate数据查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! HibernateQu
Hibernate获取数据与缓存使用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hibern
对下面的阶B树依次执行下列操作画出各步操作的结果【合肥工业大学四(分)】 ()插入 ()插入 ()插入 ()删除&n