Jpa bidirectional one-to-multiple, multiple-to-one Association
1.1. Bidirectional one-to-multiple
Order. java |
Package com. morris. entity; import java. util. set; import javax. persistence. cascadeType; import javax. persistence. column; import javax. persistence. entity; import javax. persistence. fetchType; import javax. persistence. id; import javax. persistence. onetovel; import javax. persistence. table; @ Entity @ Table (name = "orders") public class Order {@ Id @ Column (name = "order_id", length = 32) private String orderId; @ Column (name = "order_name", length = 50) private String orderName;/*** onetoworkflow: one-to-many configuration * mappedBy = "order ": specify the order attribute of multiple parties to maintain the association. **/@ onetoetype (cascade = {CascadeType. REFRESH, CascadeType. MERGE, CascadeType. REMOVE, CascadeType. PERSIST}, fetch = FetchType. LAZY, mappedBy = "order") private Set
OrderItems; public Order (String orderId, String orderName, Set
OrderItems) {super (); this. orderId = orderId; this. orderName = orderName; this. orderItems = orderItems;} public Set
GetOrderItems () {return orderItems;} public void setOrderItems (Set
OrderItems) {this. orderItems = orderItems;} public Order () {super (); // TODO Auto-generated constructor stub} public Order (String orderId, String orderName) {super (); this. orderId = orderId; this. orderName = orderName ;}@ Override public String toString () {return "Order [orderId =" + orderId + ", orderName =" + orderName + "]";} public String getOrderId () {return orderId;} public void setOrderId (String orderId) {this. orderId = orderId;} public String getOrderName () {return orderName;} public void setOrderName (String orderName) {this. orderName = orderName ;}}
|
1.2. Bidirectional multiple-to-one
OrderItem. java |
Package com. morris. entity; 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; import javax. persistence. table; @ Entity @ Table (name = "order_item") public class OrderItem {@ Id @ GeneratedValue @ Column (name = "order_item_id") private Integer orderItemId; @ Column (name = "product_name", length = 50, nullable = false) private String productName; @ Column (name = "product_price", nullable = false) private Double productPrice; /*** ManyToOne: Multi-to-one configuration * cascade (cascade): all (all), merge (update), refresh (query), persistence (SAVE ), remove (delete) * fetch: eager: The party that loads one immediately loads it. By default, * lazy: The party that loads the worker is lazy. * optional: optional, whether the foreign key can be blank ** JoinColumn: Specifies the foreign key name **/@ ManyToOne (cascade = {CascadeType. MERGE, CascadeType. REFRESH}, fetch = FetchType. EAGER, optional = false) @ JoinColumn (name = "order_id") private Order order; public OrderItem () {super (); // TODO Auto-generated constructor stub} @ Override public String toString () {return "OrderItem [orderItemId =" + orderItemId + ", productName =" + productName + ", productPrice = "+ productPrice +", order = "+ order +"] ";} public Integer getOrderItemId () {return orderItemId;} public void setOrderItemId (Integer orderItemId) {this. orderItemId = orderItemId;} public String getProductName () {return productName;} public void setProductName (String productName) {this. productName = productName;} public Double getProductPrice () {return productPrice;} public void setProductPrice (Double productPrice) {this. productPrice = productPrice;} public Order getOrder () {return order;} public void setOrder (Order order) {this. order = order;} public OrderItem (String productName, Double productPrice) {super (); this. productName = productName; this. productPrice = productPrice ;}}
|
1.3. Test
One2ManyTest. java |
Package com. morris. test; 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 org. junit. afterClass; import org. junit. beforeClass; import org. junit. test; import com. morris. entity. order; import com. morris. entity. orderItem; public class One2ManyTest {private static EntityManagerFactory factory; private static EntityManager manager; @ BeforeClass public static void setUpBeforeClass () throws Exception {factory = Persistence. createEntityManagerFactory ("jpaDemo"); manager = factory. createEntityManager (); manager. getTransaction (). begin () ;}@ Test public void test () {Order order = new Order (UUID. randomUUID (). toString (), "Sports Goods Order"); OrderItem orderItem1 = new OrderItem ("soccer", 120.0); OrderItem orderItem2 = new OrderItem ("basketball", 66.0 ); orderItem orderItem3 = new OrderItem ("badminton", 118.0); // you must set this parameter because orderItem maintains the association relationship orderItem1.setOrder (order); orderItem2.setOrder (order ); orderItem3.setOrder (order); Set
Set = new HashSet <> (); set. add (orderItem1); set. add (orderItem2); set. add (orderItem3); order. setOrderItems (set); manager. persist (order) ;}@ AfterClass public static void setUpAfterClass () throws Exception {manager. getTransaction (). commit (); manager. close (); factory. close ();}}
|