Hibernate级联关系OneToMany之 Annotation实现

[java] view
plain
copy

  1. package com.lwp.hibernate.Model;
  2. import java.io.Serializable;
  3. import javax.persistence.CascadeType;
  4. import javax.persistence.Column;
  5. import javax.persistence.Entity;
  6. import javax.persistence.FetchType;
  7. import javax.persistence.GeneratedValue;
  8. import javax.persistence.Id;
  9. import javax.persistence.JoinColumn;
  10. import javax.persistence.ManyToOne;
  11. import javax.persistence.Table;
  12. @Entity
  13. @Table(name="ORDERS")
  14. public class Order implements Serializable{
  15. private static final long serialVersionUID = 1L;
  16. public Order(){}
  17. public Order(String orderNumber){
  18. this.orderNumber =orderNumber;
  19. }
  20. @Id
  21. @GeneratedValue
  22. @Column(name="ID")
  23. private Long id;
  24. @Column(name="ORDER_NUMBER",length=15)
  25. private String orderNumber;
  26. @ManyToOne(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
  27. @JoinColumn(name="CUSTOMER_ID")
  28. private Customer customer;
  29. public Long getId() {
  30. return id;
  31. }
  32. public void setId(Long id) {
  33. this.id = id;
  34. }
  35. public String getOrderNumber() {
  36. return orderNumber;
  37. }
  38. public void setOrderNumber(String orderNumber) {
  39. this.orderNumber = orderNumber;
  40. }
  41. public Customer getCustomer() {
  42. return customer;
  43. }
  44. public void setCustomer(Customer customer) {
  45. this.customer = customer;
  46. }
  47. }

[java] view
plain
copy

  1. package com.lwp.hibernate.Model;
  2. import java.io.Serializable;
  3. import java.util.HashSet;
  4. import java.util.Set;
  5. import javax.persistence.Column;
  6. import javax.persistence.Entity;
  7. import javax.persistence.GeneratedValue;
  8. import javax.persistence.Id;
  9. import javax.persistence.OneToMany;
  10. import javax.persistence.Table;
  11. @Entity
  12. @Table
  13. public class Customer implements Serializable{
  14. private static final long serialVersionUID = 1L;
  15. public Customer(){}
  16. public Customer(String name,Set<Order> orders){
  17. this.name=name;
  18. this.orders = orders;
  19. }
  20. @Id
  21. @GeneratedValue
  22. @Column(name="ID")
  23. private Long id;
  24. @Column(name="NAME",length=15)
  25. private String name;
  26. @OneToMany(mappedBy="customer")
  27. private Set<Order> orders = new HashSet<Order>();
  28. public Set<Order> getOrders() {
  29. return orders;
  30. }
  31. public void setOrders(Set<Order> orders) {
  32. this.orders = orders;
  33. }
  34. public Long getId() {
  35. return id;
  36. }
  37. public void setId(Long id) {
  38. this.id = id;
  39. }
  40. public String getName() {
  41. return name;
  42. }
  43. public void setName(String name) {
  44. this.name = name;
  45. }
  46. }

[java] view
plain
copy

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. import org.hibernate.Session;
  4. import org.hibernate.SessionFactory;
  5. import org.hibernate.cfg.AnnotationConfiguration;
  6. import org.hibernate.cfg.Configuration;
  7. import org.hibernate.tool.hbm2ddl.SchemaExport;
  8. import com.lwp.hibernate.Model.Customer;
  9. import com.lwp.hibernate.Model.Order;
  10. public class CustomerTest {
  11. public static void main(String[] args) {
  12. new SchemaExport(new AnnotationConfiguration().configure("/hibernate.cfg.xml")).create(true, false);
  13. Set<Order> orders =  new HashSet<Order>();
  14. Order order1 = new Order("Tom_Order001");
  15. Order order2 = new Order("Tom_Order002");
  16. orders.add(order1);
  17. orders.add(order2);
  18. Customer customer = new Customer("Tom",orders);
  19. order1.setCustomer(customer);
  20. order2.setCustomer(customer);
  21. //save(customer);
  22. save(order1);
  23. save(order2);
  24. }
  25. public static void save(Object o){
  26. //Configuration cfg = new Configuration();//xx.hbm.xml形式下的new
  27. Configuration cfg = new AnnotationConfiguration(); //Annotation形式下的new
  28. SessionFactory sf = cfg.configure().buildSessionFactory();
  29. Session session = sf.openSession();
  30. session.beginTransaction();
  31. session.save(o);
  32. session.getTransaction().commit();
  33. session.close();
  34. sf.close();
  35. }
  36. }

注:这里不用save customer, save order时就会保存customer。因为mappedBy 相当于Inverse=value,既让Many一方来维护。

时间: 2025-01-13 06:00:04

Hibernate级联关系OneToMany之 Annotation实现的相关文章

Hibernate 级联之OneToMany

首先看看表结构! customer表: create table customers (     ID bigint not null    primary key auto_increment,     userName varchar(20) ); Order表: create table orders (     ID bigint not null primary key auto_increment,     customers_ID bigint,    --应该为customers

hibernate级联处理问题

hibernate进行级联处理时,关于一对一的关系应该注意的问题. 1.假如有奖品项item和奖品aword,他们之间的对应关系是 1)item      1:1    aword 奖品项与奖品是一对一的关系,一个奖品项只能包含一个奖品. 2)aword   1:n    item 奖品与奖品项是一对多的关系,一个奖品可以出现在多个奖品项中. 2.在进行hibernate注解配置的时候,他们的关系应该如下: 1)entity   Item <span style="white-space:

hibernate 一对多(级联关系)

hibernate 核心配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd&q

Hibernate 映射关系

映射组成关系 •建立域模型和关系数据模型有着不同的出发点: –域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程 –在没有数据冗余的情况下, 应该尽可能减少表的数目, 简化表之间的参照关系, 以便提高数据的访问速度 •Hibernate 把持久化类的属性分为两种: –值(value)类型: 没有 OID, 不能被单独持久化, 生命周期依赖于所属的持久化类的对象的生命周期 –实体(entity)类型: 有 OID, 可以被单独持久化, 有独立的生命周期 •显然无法

hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)

首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to-one关系 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http:/

hibernate级联删除

一对多的双向关联:user对应多个order user.xml: <class name="com.examp.ShoppingOnline.User"             table="user"            discriminator-value="C">                       <id name="id">             <generator cl

级联关系(内容大部分来自JavaEE轻量型解决方案其余的是我的想法)

1. 级联关系 在Hibernate程序中持久化的对象之间会通过关联关系互相引用.对象进行保存.更新和删除等操作时,有时需要被关联的对象也执行相应的操作,如:假设需要关联关系的主动方对象执行操作时,被关联的对象也会同步执行同一操作.这一问题可以通过使用Hibernate的级联(cascade)功能来解决. 例如:当试图删除顾客对象时,通过级联关系让Hibernate决定是否删除该对象对应的所有订单对象. cascade是<set>元素的一个属性,该属性常用值及描述如下表:  属性值    描述

Hibernate映射关系之多对多

1.用户表user和优惠券coupon存在多对多的关系,一个用户可以拥有多个优惠券,一个优惠券可以从属于多个用户. 2.user.java,创建了中间表tb_user_coupon (1)JoinTable表示中间表的 (2) /** * 一个用户可以拥有多个优惠券 但优惠券只有自己的属性,没有用户的引用 单边的一对多关系 */ @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST }) @JoinTable(n

hibernate 实体关系映射笔记

@常用属性说明: @Entity:实体类 @Table:指定对应数据表 @Id:主键,使用可以为null值的类型,如果实体类没有保存到数据库是一个临时状态 @Column:配置普通属性,除了主键外,java基本类型的属性 @Base:普通属性的加载方式 @GeneratedValue:主键生成策略 @Temporal:日期类型(DATE,TIME还是TIMESTAMP),如果属性类型是java.util.Date(是以上3个类的父类)类型时才需要使用该@声明具体的日期类型 @Transient: