Hibernate一对多关系详解
来源:互联网 发布:淘宝客服如何算提成 编辑:程序博客网 时间:2024/06/03 13:32
一方:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="com.entity.Author" table="Author" > <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="50" not-null="true" /> </property> <set name="books" inverse="true" cascade="save-update"> <key column="author_id"/> <one-to-many class="com.entity.Book"/> </set> </class></hibernate-mapping>
多方:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping> <class name="com.entity.Book" table="Book" > <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="name" length="50" not-null="true" /> </property> <many-to-one name="author" class="com.entity.Author" cascade="save-update"> <column name="author_id"></column> </many-to-one> </class></hibernate-mapping>
Insert操作:
从一方操作:
public void insert(){Transaction transaction = null;try {transaction = session.beginTransaction();Author author = new Author();author.setName("李威");Book book = new Book();book.setName("斗罗大陆");book.setAuthor(author);author.getBooks().add(book);session.save(author);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}}}从多方操作:
public void insert(){Transaction transaction = null;try {transaction = session.beginTransaction();Author author = new Author();author.setName("李威");Book book = new Book();book.setName("斗罗大陆");book.setAuthor(author);author.getBooks().add(book);session.save(author);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}}}明显从一方操作需要建立更复杂的联系,所以,应该从多方建立联系。
更新操作:
一方:
public void modify(){Transaction transaction = null;try {transaction = session.beginTransaction();Book book = (Book)session.load(Book.class, 18);Author author = (Author)session.load(Author.class, 23);book.setAuthor(author);session.update(book);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}}}多方:
public void modify(){Transaction transaction = null;try {transaction = session.beginTransaction();Book book = (Book)session.load(Book.class, 18);Author author = (Author)session.load(Author.class, 24);book.setAuthor(author);author.getBooks().add(book);session.update(author);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}}}
查询操作 :
一方:注意此时如果没有设置懒加载,获取的set是代理对象,如果session关闭后,在获取对象属性,会遇到懒加载问题,可通过设置lazy=”false”,或者设置session在获取属性后关闭解决。
public void select(){Transaction transaction = null;Set<Book> books = null;try {transaction = session.beginTransaction();Author author = (Author)session.load(Author.class, 23);books = author.getBooks();for (Book book : books) {System.out.println(book.getName());}transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}}}多方:同样存在懒加载问题
public void select(){Transaction transaction = null;Author author = null;try {transaction = session.beginTransaction();Book book = (Book)session.load(Book.class, 16);author = book.getAuthor();System.out.println(author.getName());transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}
删除操作:
一方:如果需要级联删除多方,将cascade设置为all
public void delete(){Transaction transaction = null;try {transaction = session.beginTransaction();//Book book = (Book)session.load(Book.class, 18);Author author = (Author)session.load(Author.class, 23);session.delete(author);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}}}多方:
public void delete(){Transaction transaction = null;try {transaction = session.beginTransaction();Book book = (Book)session.load(Book.class, 18);//Author author = (Author)session.load(Author.class, 23);session.delete(book);transaction.commit();} catch (HibernateException e) {// TODO: handle exceptione.printStackTrace();if(transaction!=null){transaction.rollback();}}}
0 0
- Hibernate一对多关系详解
- Hibernate 关系映射注解详解--一对多
- Hibernate对象关系映射详解之“一对多”关系映射
- Hibernate一对多和多对一关系详解
- Hibernate一对多和多对一关系详解
- Hibernate一对多和多对一关系详解
- hibernate映射总结详解: 映射一对多双向关联关系
- hibernate中List一对多映射关系详解
- hibernate中List一对多映射关系详解
- Hibernate 一对多关联关系
- Hibernate一对多单向关系
- Hibernate 一对多关系映射
- Hibernate 一对多的关系
- Hibernate关系(一对多)
- hibernate配置一对多关系
- hibernate配置一对多关系
- hibernate一对多关系映射
- hibernate一对多关联关系
- js基本效果
- 东东的女朋友(二)【贪心】+【区间覆盖】
- OpenWrt源码下载说明
- Leetcode_Majority Element
- openSession 和getCurrentSession的区别
- Hibernate一对多关系详解
- javaScript数组方法
- Mybatis学习【1】
- 体验Ipython 惹得祸
- ORTC以及WebRTC的未来【转】
- 设计模式-观察者模式
- java.lang.IllegalArgumentException: Malformed /uxxxx encoding
- CentOS7安装MongoDB3.4(yum安装)
- HttpURLConnection用法详解