对于应用最多的一对多表关系结构,使用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 {
@Test
public void test1(){
//加载hibernate配置文件
Configuration configure = new Configuration().configure();
//创建session工厂对象
SessionFactory sessionFactory = configure.buildSessionFactory();
//打开一个session
Session 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