mysql - Hibernate Inheritance - Structure referring to Superclass -


i want create structure manage products in mysql using hibernate 4.1. in general there 2 kind of products: simpleproduct (contains description , price) , complexproduct (contains list containing products again).

so created abstact class product , derived classes simpleproduct , complexproduct. thought table_per_class inheritancetype convenient.

product.java

@entity @inheritance(strategy=inheritancetype.table_per_class) public abstract class product {      private long id;     private string description;     private bigdecimal price;      private product parent;       protected product() {      }      protected product(string description, bigdecimal price) {         this.description = description;         this.price = price;     }      @id      @generatedvalue(strategy = generationtype.table)     @column(name="id")     public long getid() {         return id;     }      public void setid(long id) {         this.id = id;     }      @column(name="description")     public string getdescription() {         return description;     }      public void setdescription(string description) {         this.description = description;     }      @column(name="price", precision=2, columndefinition="decimal(10,2)")     public bigdecimal getprice() {         return price;     }      public void setprice(bigdecimal price) {         this.price = price;     }      @override     public string tostring() {         return getdescription()+", "+getprice()+"€";     }  } 

simpleproduct.java

@entity public class simpleproduct extends product {      public simpleproduct() {         super();     }      public simpleproduct(string description, bigdecimal price) {         super(description,price);     }  } 

complexproduct.java

@entity public class complexproduct extends product  {      private list<product> containedproducts;      public complexproduct() {      }      public complexproduct(string description, bigdecimal price, list<product> containedproducts) {         super(description,price);         if (containedproducts == null) {             this.containedproducts = new arraylist<product>();         } else {             this.containedproducts = containedproducts;         }     }      public complexproduct(string description, bigdecimal price) {         super(description,price);         this.containedproducts = new arraylist<product>();     }      @onetomany(targetentity=product.class, cascade=cascadetype.all, fetch=fetchtype.lazy)     public list<product> getcontainedproducts() {         return containedproducts;     }      public void setcontainedproducts(list<product> containedproducts) {         this.containedproducts = containedproducts;     }      public void addtoproductlist(product p) {         this.containedproducts.add(p);     }  } 

then tried execute teststructure:

simpleproduct sp1 = new simpleproduct("simpleproduct1",new bigdecimal("2.99")); simpleproduct sp2 = new simpleproduct("simpleproduct2",new bigdecimal("4.99")); simpleproduct sp3 = new simpleproduct("simpleproduct3",new bigdecimal("3.99"));  complexproduct cp1 = new complexproduct("complexproduct1",new bigdecimal("8.99")); cp1.addtoproductlist(sp2); cp1.addtoproductlist(sp3);  hibernateutil.persist(sp1); hibernateutil.persist(sp2); hibernateutil.persist(sp3);  hibernateutil.persist(cp1);  hibernateutil.shutdown(); 

and here persist method:

public static void persist(object o) {     session session = getsessionfactory().opensession();     transaction tx = session.begintransaction();      session.persist(o);     tx.commit();                         } 

i know, persist-method teststructure no clean, test.

the problem exception when programm executing hibernateutil.persist(cp1):

exception in thread "main" org.hibernate.persistentobjectexception: detached entity passed persist: product

so, wrong it? , how can solve problem?

thank you

i have found solution: if use session.save(o) instead of session.persist(o) works!


Comments

Popular posts from this blog

Delphi XE2 Indy10 udp client-server interchange using SendBuffer-ReceiveBuffer -

Qt ActiveX WMI QAxBase::dynamicCallHelper: ItemIndex(int): No such property in -

Enable autocomplete or intellisense in Atom editor for PHP -