通过一个简单的例子来理解JPA的单向多对一
Orders -----一的那一方
OrderItem-------多的那一方
persistence.xml
在src目录下新建META-INF目录,然后再该目录下新建persistence.xml配置文件
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="olayjpa" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
<property name="hibernate.connection.username" value="olay"/>
<property name="hibernate.connection.password" value="olay"/>
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@192.168.1.100:1521:ORCL"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
Orders.java
package com.olay.entity;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name="MyOrder")
public class Orders implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String orderid;
private float account=0f;
@Id @Column(length=50)
public String getOrderid() {
return orderid;
}
public void setOrderid(String orderid) {
this.orderid = orderid;
}
@Column(nullable=false)
public float getAccount() {
return account;
}
public void setAccount(float account) {
this.account = account;
}
}
OrderItem.java
package com.olay.entity;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class OrderItem implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String produceName;
private float sellPrice=0f;
private Orders orders;
@Id @GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(length=50,nullable=false)
public String getProduceName() {
return produceName;
}
public void setProduceName(String produceName) {
this.produceName = produceName;
}
@Column(nullable=false)
public float getSellPrice() {
return sellPrice;
}
public void setSellPrice(float sellPrice) {
this.sellPrice = sellPrice;
}
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},
fetch=FetchType.LAZY,optional=false)
@JoinColumn(name="orders_id")
public Orders getOrders() {
return orders;
}
public void setOrders(Orders orders) {
this.orders = orders;
}
}
单向多对一,在多的一方配置
@ManyToOne(cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},
fetch=FetchType.LAZY,optional=false)
@JoinColumn(name="orders_id") 指定外键
cascade = CascadeType.MERGE--级联更新 cascade=CascadeType.PERSIST--级联持久
cascade=CascadeType.REMOVE--级联删除 cascade=CascadeType.REFRESH--
级联刷新--在业务逻辑中可能对象进行修改,但是读取出来并不是最新的数据。 如果需要最新的数据,这时就得需要级联刷新 fetch =
FetchType.LAZY--开启延迟加载。 fetch = FetchType.EAGER--即时加载 optional--boolean
在数据中,这个字段是否为空 optional=false,这个选项不可以空
测试类:
package com.olay.junit;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.olay.entity.OrderItem;
import com.olay.entity.Orders;
import junit.framework.TestCase;
public class OneToMany extends TestCase {
public void test(){
EntityManagerFactory emf = Persistence.createEntityManagerFactory("olayjpa");
EntityManager em=emf.createEntityManager();
em.getTransaction().begin();
Orders orders = new Orders();
orders.setOrderid(UUID.randomUUID().toString());
orders.setAccount(345);
OrderItem orderItem = new OrderItem();
orderItem.setProduceName("足球1");
orderItem.setSellPrice(90f);
orderItem.setOrders(orders);
em.persist(orderItem);
em.getTransaction().commit();
emf.close();
}
}
结果为: