(1) below there are two entity classes Order.java and Orderitem.java the former as one the latter is the many party (i.e. an order can contain multiple order items)
Below is their mapping relationship.
(2) The Order.java code is as follows
Package Com.lc.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= "Orders") public class Order {private String orderid;private Float amount = 0f;private set<orderitem> items = new hashset<orderitem> (); @Id @column (length = n) public String Getorderid ( ) {return orderid;} public void Setorderid (String orderid) {this.orderid = OrderID;} @Column (nullable = false) public Float Getamount () {return amount;} public void Setamount (Float amount) {this.amount = amount;} Cascade Operations If you use the all//@OneToMany (cascade = {Cascadetype.refresh, cascadetype.persist,cascadetype.merge, Cascadetype.remove}) The default value of//fetch is: if it is the party that gets many, the default is the deferred load//mappedby indicates that the relationship is maintained, which is the total of the OrderItem class which attribute is maintained @onetomany ( Cascade = Cascadetype.all,fetch=fetchtype.lazy,mappedby= "order") public set<orderitem> GetItems () {return items;} public void Setitems (set<orderitem> items) {this.items = items;} /* * function for saving order items */public void Addorderitem (OrderItem orderitem) {orderitem.setorder (this); This.items.add (OrderItem);}}
(3) Orderitem.java code
Package Com.lc.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;import javax.persistence.Table; @Entitypublic Class OrderItem {private Integer id;private String producename;private Float sellprice;private Order order;@ Id@generatedvaluepublic Integer getId () {return ID;} public void SetId (Integer id) {this.id = ID;} @Column (length = 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;} Fetch on one side defaults to immediate load//optional indicates whether it can be null true to indicate that the name can be null//Joincolumn for the foreign key, specifying @manytoone by name (Cascade = { Cascadetype.merge, Cascadetype.refresh}, Optional = False) @JoinColumn (nAme = "order_id") public order GetOrder () {return order;} public void Setorder (order order) {this.order = order;}}
(4) test procedure
package Com.lc.junittest;import Java.util.uuid;import Javax.persistence.entitymanager;import Javax.persistence.entitymanagerfactory;import Javax.persistence.persistence;import Org.junit.Test;import Com.lc.bean.order;import Com.lc.bean.orderitem;public class Onetomanytest {@Testpublic void Save () { Entitymanagerfactory factory = persistence.createentitymanagerfactory ("Jpatest"); Entitymanager em = Factory.createentitymanager (); Em.gettransaction (). Begin ();//Create an order, order = New Order (); O Rder.setamount (34f); Order.setorderid ("999");//Create an order entry OrderItem orderItem1 = new OrderItem (); O Rderitem1.setproducename ("football"); Orderitem1.setsellprice (90f); Order.addorderitem (orderItem1);//Create a second order item OrderItem ORDERITEM2 = new OrderItem (); Orderitem2.setproducename ("Badminton"); Orderitem2.setsellprice (56f); Order.addorderitem ( ORDERITEM2);//Save the Order em.persist (order); Em.gettransaction (). commit (); Factory.close ();}}
(5) test results
JPA entity attribute one-to-many Relationship Mapping