Hibernate注解开发–一对多注解开发

这里用的是javax.persistence包下的注解,上代码。与普通方式不同的是不需要映射文件,还是以客户(Customer)与订单(Order)为例。但是还需要配置核心配置文件

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernatetest?useUnicode=true&characterEncoding=UTF-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>

<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

<!-- 配置实体类 -->
<mapping class="com.wang.domain.Customer" />
<mapping class="com.wang.domain.Orders" />

<!--<mapping resource="com/wang/domain/Customer.hbm.xml" />-->
<!--<mapping resource="com/wang/domain/Orders.hbm.xml" />-->

</session-factory>
</hibernate-configuration>

实体类创建

订单类

@Entity
@Table(name = "t_order")
public class Orders {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer oid;
private Double price;
private String adress;

@ManyToOne(targetEntity = Customer.class)
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinColumn(name = "c_id")
private Customer customer;

// 以下省略get与set方法
}

客户类

@Entity
@Table(name = "c_customer")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer cid;

@Column(name = "c_name")
private String name;

@OneToMany(mappedBy = "customer",targetEntity = Orders.class)
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private Set<Orders> orders = new HashSet<Orders>();
}

测试类

@Test
public void test1(){
Configuration cf = new Configuration().configure();
SessionFactory sf = cf.buildSessionFactory();
Session session = sf.openSession();
Transaction tsc = session.beginTransaction();
Customer c1 = new Customer();
c1.setName("Jar");

Orders o1 = new Orders();
o1.setPrice(100d);
o1.setAdress("huqi1");
o1.setCustomer(c1);

Orders o2 = new Orders();
o2.setPrice(200d);
o2.setAdress("huqi2");
o2.setCustomer(c1);

//因为在客户类中设置了由订单方来维护外键,所以保存到数据库的时候要保存所有订单,同时要设置级联
session.save(o1);
session.save(o2);

tsc.commit();
session.close();
}