JPA(三)の実体関係一対多(多対一)

4450 ワード

1.背景紹介:
商品を購入する場合、注文情報(Order)と注文商品情報(OrderItem)の関係は一対多の関係である.
 
2.エンティティbean:
  Order.JAvaコード
 
package com.sinoi.bean;

import java.util.HashSet;
import java.util.Set;

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.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="my_order")
public class Order {
	@Id @Column(length=12)
	private String orderId;
	@Column(nullable=false)
	private Float amount = 0f;
	@OneToMany(cascade={CascadeType.REMOVE, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH},
			mappedBy="order")
	private Set<OrderItem> orderItems = new HashSet<OrderItem>();
	public String getOrderId() {
		return orderId;
	}
	public void setOrderId(String orderId) {
		this.orderId = orderId;
	}
	public Float getAmount() {
		return amount;
	}
	public void setAmount(Float amount) {
		this.amount = amount;
	}
	
	public Set<OrderItem> getOrderItems() {
		return orderItems;
	}
	public void setOrderItems(Set<OrderItem> orderItems) {
		this.orderItems = orderItems;
	}
	public void addOrderItem(OrderItem orderItem) {
		orderItem.setOrder(this);// !
		this.orderItems.add(orderItem);
	}
	
	
}

OrderItem.JAvaコード
package com.sinoi.bean;

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.ManyToOne;

@Entity
public class OrderItem {
	@Id @GeneratedValue
	private Integer id;
	@Column(length=20, nullable=false)
	private String productName;
	@Column(nullable=false)
	private Float sellPrice;
	@ManyToOne(cascade={CascadeType.REFRESH, CascadeType.MERGE}, optional=false)
	@JoinColumn(name="item_order_for")
	private Order order;
	public Order getOrder() {
		return order;
	}
	public void setOrder(Order order) {
		this.order = order;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getProductName() {
		return productName;
	}
	public void setProductName(String productName) {
		this.productName = productName;
	}
	public Float getSellPrice() {
		return sellPrice;
	}
	public void setSellPrice(Float sellPrice) {
		this.sellPrice = sellPrice;
	}
}

 
3.テストコード
package junit.test;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.junit.Test;

import com.sinoi.bean.Order;
import com.sinoi.bean.OrderItem;

public class UnitTest {
	@Test
	public void save() {
		EntityManagerFactory entityManagerFactory = Persistence
				.createEntityManagerFactory("unitname");
		EntityManager entityManager = entityManagerFactory
				.createEntityManager();
		entityManager.getTransaction().begin();
		
		Order order = new Order();
		order.setOrderId("jfdkf323");
		order.setAmount(232f);
		OrderItem orderItem = new OrderItem();
		orderItem.setProductName("basketball");
		orderItem.setSellPrice(221f);
		OrderItem orderItem2 = new OrderItem();
		orderItem2.setProductName("football");
		orderItem2.setSellPrice(11f);
		orderItem.setOrder(order);
		orderItem2.setOrder(order);
		order.addOrderItem(orderItem);
		order.addOrderItem(orderItem2);

		entityManager.persist(order);
		entityManager.getTransaction().commit();
		entityManager.close();
		entityManagerFactory.close();
		
	}
}

 
 
4.プロファイルpersistence.xmlは、先のJPA(一)、、、と同様、ここでは省略する