java - object is not an instance of declaring class -Hibernate -


i new hibernate , practicing examples on one-to-many mapping not getting why throwing error.

1)employee.java

package com.common.pojo;  import java.util.set;  public class employee  { private int id; private string name; private set certificate;  public employee (){}  public employee(string name) {      this.name = name;  } public int getid() {     return id; }  public void setid(int id) {     this.id = id; }  public string getname() {     return name; }  public void setname(string name) {     this.name = name; }  public set  getcertificate() {     return certificate; }  public void setcertificate(set  certificate) {     this.certificate = certificate; }  } 

2) certificate.java

package com.common.pojo;  public class certificate  {     private int id;     private string name;      public certificate(){}     public certificate(string name)     {         this.name = name;     }      public int getid() {         return id;     }      public void setid(int id) {         this.id = id;     }      public string getname() {         return name;     }      public void setname(string name) {         this.name = name;     } } 

3)employee.hbm.xml

<?xml version="1.0" encoding="utf-8"?> <!doctype hibernate-mapping public      "-//hibernate/hibernate mapping dtd 3.0//en"     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  <hibernate-mapping>     <class table="employee" name="com.common.pojo.employee">         <meta attribute="class-description">             employee class         </meta>         <id name="id" column="id" type="int">             <generator class="native"></generator>         </id>         <property name="name" column="name" type="string"></property>         <set name="certificate" cascade="all">             <key column="id"></key>             <one-to-many class="com.common.pojo.certificate" />         </set>     </class>       <class table="certificate" name="com.common.pojo.certificate">         <meta attribute="class-description">             certificate class         </meta>         <id name="id" column="cer_id" type="int">             <generator class="native"></generator>         </id>         <property name="name" column="cer_name" type="string"></property>      </class>   </hibernate-mapping>  

4)hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?> <!doctype hibernate-configuration public     "-//hibernate/hibernate configuration dtd 3.0//en"     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  <hibernate-configuration>     <session-factory>         <property name="hibernate.dilect">org.hibernate.dialect.hsqldialect</property>         <property name="hibernate.driver.connection_class">org.hsqldb.jdbcdriver</property>         <property name="hibernate.connection.url">jdbc:hsqldb:hsql://localhost/</property>         <property name="hibernate.connection.username">sa</property>         <property name="hibernate.connection.password"></property>         <property name="show_sql">true</property>          <mapping resource="employee.hbm.xml" />     </session-factory> </hibernate-configuration> 

5)testapp.java

package com.common.mainapp;  import java.util.hashset; import java.util.set;  import org.hibernate.hibernateexception; import org.hibernate.session; import org.hibernate.sessionfactory; import org.hibernate.transaction; import org.hibernate.cfg.configuration;  import com.common.pojo.employee;  public class testapp {      private static sessionfactory factory;     @suppresswarnings("deprecation")     public static void main(string[] args) {         try         {             factory =new configuration().configure().buildsessionfactory();         }         catch(hibernateexception exception)         {             exception.printstacktrace();         }         testapp app=new testapp();         set certificate =new hashset();         certificate.add("be");         certificate.add("mba");         certificate.add("bca");         app.addemployee("amit",certificate);         set certificate1 =new hashset();         certificate1.add("scjp");         certificate1.add("ocjp");         app.addemployee("sunil",certificate1);     }     public void addemployee(string name,set certificate)     {         transaction tx=null;         session session=factory.opensession();         integer employeeid =null;         try         {             tx=session.begintransaction();                employee employee=new employee(name);             employee.setcertificate(certificate);             employeeid = (integer) session.save(employee);             tx.commit();             }         catch(hibernateexception exception)         {             if (tx!=null) tx.rollback();             exception.printstacktrace();          }                 {             session.close();         }     }  } 

and have created table employee , certificate using below ddl command

create table certificate ( cer_id int identity, cer_name varchar(25), emp_id int  ) 

and

create table employee ( id int identity, name varchar(25) ) 

but after running getting below error.

hibernate: insert employee (id, name) values (default, ?) apr 14, 2014 6:34:35 em org.hibernate.property.basicpropertyaccessor$basicgetter error: hhh000122: illegalargumentexception in class: com.common.pojo.certificate, getter method of property: id org.hibernate.propertyaccessexception: illegalargumentexception occurred calling getter of com.common.pojo.certificate.id     @ org.hibernate.property.basicpropertyaccessor$basicgetter.get(basicpropertyaccessor.java:192)     @ org.hibernate.tuple.entity.abstractentitytuplizer.getidentifier(abstractentitytuplizer.java:346)     @ org.hibernate.persister.entity.abstractentitypersister.getidentifier(abstractentitypersister.java:4740)     @ org.hibernate.persister.entity.abstractentitypersister.istransient(abstractentitypersister.java:4459)     @ org.hibernate.engine.internal.foreignkeys.istransient(foreignkeys.java:243)     @ org.hibernate.event.internal.abstractsaveeventlistener.getentitystate(abstractsaveeventlistener.java:511)     @ org.hibernate.event.internal.defaultsaveorupdateeventlistener.performsaveorupdate(defaultsaveorupdateeventlistener.java:100)     @ org.hibernate.event.internal.defaultsaveorupdateeventlistener.onsaveorupdate(defaultsaveorupdateeventlistener.java:90)     @ org.hibernate.internal.sessionimpl.firesaveorupdate(sessionimpl.java:680)     @ org.hibernate.internal.sessionimpl.saveorupdate(sessionimpl.java:672)     @ org.hibernate.engine.spi.cascadingactions$5.cascade(cascadingactions.java:235)     @ org.hibernate.engine.internal.cascade.cascadetoone(cascade.java:352)     @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:295)     @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:161)     @ org.hibernate.engine.internal.cascade.cascadecollectionelements(cascade.java:381)     @ org.hibernate.engine.internal.cascade.cascadecollection(cascade.java:321)     @ org.hibernate.engine.internal.cascade.cascadeassociation(cascade.java:298)     @ org.hibernate.engine.internal.cascade.cascadeproperty(cascade.java:161)     @ org.hibernate.engine.internal.cascade.cascade(cascade.java:118)     @ org.hibernate.event.internal.abstractsaveeventlistener.cascadeaftersave(abstractsaveeventlistener.java:460)     @ org.hibernate.event.internal.abstractsaveeventlistener.performsaveorreplicate(abstractsaveeventlistener.java:294)     @ org.hibernate.event.internal.abstractsaveeventlistener.performsave(abstractsaveeventlistener.java:194)     @ org.hibernate.event.internal.abstractsaveeventlistener.savewithgeneratedid(abstractsaveeventlistener.java:125)     @ org.hibernate.event.internal.defaultsaveorupdateeventlistener.savewithgeneratedorrequestedid(defaultsaveorupdateeventlistener.java:209)     @ org.hibernate.event.internal.defaultsaveeventlistener.savewithgeneratedorrequestedid(defaultsaveeventlistener.java:55)     @ org.hibernate.event.internal.defaultsaveorupdateeventlistener.entityistransient(defaultsaveorupdateeventlistener.java:194)     @ org.hibernate.event.internal.defaultsaveeventlistener.performsaveorupdate(defaultsaveeventlistener.java:49)     @ org.hibernate.event.internal.defaultsaveorupdateeventlistener.onsaveorupdate(defaultsaveorupdateeventlistener.java:90)     @ org.hibernate.internal.sessionimpl.firesave(sessionimpl.java:711)     @ org.hibernate.internal.sessionimpl.save(sessionimpl.java:703)     @ org.hibernate.internal.sessionimpl.save(sessionimpl.java:698)     @ com.common.mainapp.testapp.addemployee(testapp.java:74)     @ com.common.mainapp.testapp.main(testapp.java:52) caused by: java.lang.illegalargumentexception: object not instance of declaring class     @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)     @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source)     @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source)     @ java.lang.reflect.method.invoke(unknown source)     @ org.hibernate.property.basicpropertyaccessor$basicgetter.get(basicpropertyaccessor.java:169)     ... 32 more 

you've mapped certificates set of certificate objects:

   <set name="certificate" cascade="all">       <key column="id"></key>       <one-to-many class="com.common.pojo.certificate" />    </set> 

but in test add strings set:

    set certificate =new hashset();     certificate.add("be");     certificate.add("mba");     certificate.add("bca"); 

java's generics recognizing such errors on compile time, better specify element type of collections use, compilation error when adding wrong element types:

private set<certificate> certificate; 

Comments

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -