Hibernate关联关系之多对一
来源:互联网 发布:毕业生贷款分期软件 编辑:程序博客网 时间:2024/05/16 11:49
域对象关系:
1.关联:类之间引用关系,以属性声明的方式体现。
2.依赖:类之间访问关系,A类中的某个方法new B(),或者A类中的某个方法new B().getXxx()形式出现。但是类B不是类A的属性。
3.聚集:指的是整体与部分的关系:如人和手的关系,部分类不能脱离整体类单独存在。
4.一般化:泛化。继承。
1、多对一关系:(多个订单对应一个客户)
Order类
public class Order {private Integer id;private String orderNumber;private float price;/* 建立从Order到Customer之间多对一关联关系 */private Customer customer ;}
Order.hbm.xml
<?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.xxc.domain.Order" table="Orders" lazy="false"><id name="id" column="id" type="integer"><generator class="native"></generator></id><property name="orderNumber" column="orderNumber" type="string" length="20"/><property name="price" column="price" type="float"/><!-- 映射从Order到Customer之间多对一关联关系 --><many-to-one name="customer" class="com.xxc.domain.Customer" column="cid"/></class></hibernate-mapping>
Customer类
public class Customer {private Integer id;private String fname ;private String lname ;private Integer age;private Date birthday;private boolean married;private byte[] photo;private String description;}
Customer.hbm.xml
<?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.xxc.domain.Customer" table="Customers" lazy="false"><id name="id" column="id" type="integer"><generator class="native"></generator></id><property name="name" column="name" type="string" length="20" access="property"/><property name="birthday" column="birthday" type="date"/><property name="age" column="age" type="integer" length="20"/><property name="description" column="description" type="text" /><property name="married"><column name="married" sql-type="int(20)"></column></property><property name="photo"> <!-- 当要手动设置数据库类型的时候可以用到此元素 property表的column属性和子元素column是互斥的,只能用其一 --><column name="photo" sql-type="longblob"></column></property></class></hibernate-mapping>
测试类:
package com.xxc.app;import java.sql.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.BeforeClass;import org.junit.Test;import com.xxc.domain.Customer;import com.xxc.domain.Order;public class App {private static SessionFactory sf = null;@BeforeClasspublic static void initialize(){Configuration config = new Configuration();/* 也可以写成这样的形式 方法链编程 *sf = config.addClass(Customer.class).addClass(Order.class).buildSessionFactory(); */config.addClass(Customer.class);config.addClass(Order.class);sf = config.buildSessionFactory();}@Testpublic void insertCustomer(){Customer c = new Customer();c.setFname("x");c.setLname("x1122c");c.setBirthday(Date.valueOf("2012-12-21"));c.setMarried(false);c.setDescription("^^^^^^^^^^^^^^^");c.setAge(10);Order o = new Order();o.setOrderNumber("2");o.setPrice(199);//设置订单和客户的关联关系o.setCustomer(c);Session session = sf.openSession();Transaction t = session.beginTransaction();//如果在<many-to-one>标签中设置了cascade="save-update" 那么这里即使不保存customer对象,hibernate也会进行级联保存的//session.save(c);session.save(o);t.commit();session.close();}}
注意:
当Hibernate持久化一个临时对象时,在默认情况下,它不会自动持久化所关联的其他临时对象,所以会抛出TransientObjectException异常。如果希望当Hibernate持久化Order对象时自动持久化所关联的Customer对象,可以把<many-to-one>的cascade属性设为"save-update",cascade属性的默认值为"none"。
- Hibernate关联关系之多对一
- Hibernate关联关系之多对一
- Hibernate学习笔记7--关联关系之多对一
- hibernate关联关系之多对多关系
- Hibernate关联关系之多对多
- Hibernate关联关系映射之多对多关联关系
- hibernate之多对一关联映射
- Hibernate映射之多对一关联映射
- 【Hibernate步步为营】--关联映射之多对一
- hibernate之多对一单向关联
- 【Hibernate步步为营】--关联映射之多对一
- Hibernate 关联映射 之多对一关联(一)
- Hibernate关联映射之多对一单向关联映射
- hibernate关联映射之多对一单向关联
- Hibernate学习笔记10--关联关系之多对多
- hibernate中的多对一关联关系
- hibernate中的多对一关联关系
- Hibernate注解多对一关联关系
- Template Method模板方法模式
- 黑马程序员之java中一些小知识点(不断更新中)
- How To Get Min-Cost Between two points in graph (Dijkstra’s algorithm)
- 西部数码网站管理助手serv-u默认密码
- 【SQL】MySQL内置函数中的字符串函数和日期时间函数
- Hibernate关联关系之多对一
- 哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
- 堆和栈的区别
- Overlay加载2d图片
- live555在arm linux下的交叉编译,并下载的Arm板播放H264文件
- uva 10161 - Ant on a Chessboard
- ios几个拉伸函数的使用
- 开机顺序
- 求最大公约数和最小公倍数