JPA--单向多对一

通过一个简单的例子来理解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();
	}

}



结果为:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值