Hibernate的注解开发之数据的三种关系介绍,表结构一对多

来源:互联网 发布:一厢情愿的感情知乎 编辑:程序博客网 时间:2024/05/22 12:19

对于应用最多的一对多表关系结构,使用hibernate的注解开发简单案例

首先需要先在hibernate的核心配置文件里配置映射文件

关于客户与订单表之间的一对多关系

hibernate.cfg.xml


<mapping class="cn.itheima.onetomany.Customer" /><mapping class="cn.itheima.onetomany.Order" />

客户类

Customer.java

package cn.itheima.onetomany;import java.util.HashSet;import java.util.Set;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;import org.hibernate.annotations.CascadeType;@Entity//创建ORM对象实体@Table(name = "tbl_customer")//设置对应的表public class Customer {@Id//主键设置@GeneratedValue(strategy = GenerationType.IDENTITY)//主键生成策略private Integer id;private String name;private String sex;//设置一对多关系//注意mappedBy是多的一方类的属性名customer@OneToMany(targetEntity = Order.class, mappedBy = "customer")//级联保存@Cascade(CascadeType.SAVE_UPDATE)private Set<Order> orders = new HashSet<>();public Set<Order> getOrders() {return orders;}public void setOrders(Set<Order> orders) {this.orders = orders;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}


订单类

Order.java

package cn.itheima.onetomany;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;@Entity//实体对象@Table(name="tbl_order")//对应的表public class Order {@Id//主键@GeneratedValue(strategy=GenerationType.IDENTITY)//主键生成策略private Integer oid;private Double money;private String receiverInfo;//多对一关系@ManyToOne(targetEntity=Customer.class)@JoinColumn(name="cid")//生成的外键字段名private Customer customer;public Integer getOid() {return oid;}public void setOid(Integer oid) {this.oid = oid;}public Double getMoney() {return money;}public void setMoney(Double money) {this.money = money;}public String getReceiverInfo() {return receiverInfo;}public void setReceiverInfo(String receiverInfo) {this.receiverInfo = receiverInfo;}public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}}

测试类

CustomerOrderTest.java

package cn.itheima.onetomany;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;public class CustomerOrderTest {@Testpublic void test1(){//加载hibernate配置文件Configuration configure = new Configuration().configure();//创建session工厂对象SessionFactory sessionFactory = configure.buildSessionFactory();//打开一个sessionSession session = sessionFactory.openSession();//开启事务管理Transaction transaction = session.beginTransaction();try{Customer c = new Customer();c.setName("张龙");c.setSex("男");Order o1 = new Order();o1.setMoney(2423d);o1.setReceiverInfo("北京");Order o2 = new Order();o2.setMoney(3325d);o2.setReceiverInfo("天津");//维护外键o1.setCustomer(c);o2.setCustomer(c);//级联操作c.getOrders().add(o1);c.getOrders().add(o2);session.save(c);//提交事务transaction.commit();}catch(Exception e){//回滚事务transaction.rollback();e.printStackTrace();throw new RuntimeException();}finally{session.close();}}}

测试结果

tbl_order


tbl_customer




0 0
原创粉丝点击