Code:
package com.entity;
import java.util.*;
public class Department {
private String deptName;
private int deptId;
private Set<String> toolsUsed = new HashSet<String>();
private Set<Employee> employees = new HashSet<Employee>();
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
public String getDeptName() {
return deptName;
}
public int getDeptId() {
return deptId;
}
public Set<String> getToolsUsed() {
return toolsUsed;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
public void setToolsUsed(Set<String> toolsUsed) {
this.toolsUsed = toolsUsed;
}
}
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.entity.Department" table="Department">
<id name="deptId" column="DEPT_ID">
<generator class="sequence">
<param name="dept_sequence_206819"/>
</generator>
</id>
<property name="deptName" column="DEPT_NAME" length="32" />
<set name="toolsUsed" table="TOOLS_USED_DEPARTMENT">
<key column="DEPT_ID" />
<element type="string" column="TOOL_NAME" not-null="true" />
</set>
<set name="employees" cascade="all">
<key column="DEPT_ID" />
<one-to-many class="com.entity.Employee"/>
</set>
</class>
</hibernate-mapping>
Code:
package com.entity;
import java.util.HashSet;
import java.util.Set;
public class Employee {
private int empId;
private int deptId;
private String empName;
private Set<String> computerLanguage = new HashSet<String>();
public int getEmpId() {
return empId;
}
public int getDeptId() {
return deptId;
}
public String getEmpName() {
return empName;
}
public Set<String> getComputerLanguage() {
return computerLanguage;
}
public void setComputerLanguage(Set<String> computerLanguage) {
this.computerLanguage = computerLanguage;
}
public void setEmpId(int empId) {
this.empId = empId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
public void setEmpName(String empName) {
this.empName = empName;
}
}
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.entity.Employee" table="EMPLOYEE">
<id name="empId" column="EMP_ID">
<generator class="sequence">
<param name="emp_sequence_206819"/>
</generator>
</id>
<property name="empName" column="EMP_NAME" length="32" />
<set name="computerLanguage" table="EMP_LANG">
<key column="EMP_ID" />
<element type="string" column="COMP_LANG" not-null="true" />
</set>
<many-to-one name="deptId" class="com.entity.Department" cascade="all" column="DEPT_ID" not-null="true"/>
</class>
</hibernate-mapping>
Code:
package com.entity;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class MainClass {
private static Session session = null;
private static Session getSession() {
SessionFactory sf = new Configuration().configure()
.buildSessionFactory();
session = sf.openSession();
return session;
}
public static void main(String[] args) {
Session session = getSession();
Transaction trans = session.beginTransaction();
Department dept = new Department();
dept.setDeptName("NSS");
Set<String> tools = new HashSet<String>();
tools.add("Putty");
tools.add("VMWare");
tools.add("NetStat");
dept.setToolsUsed(tools);
Set<Employee> employees = new HashSet<Employee>();
Employee emp1 = new Employee();
emp1.setEmpName("Tirtha");
emp1.setDeptId(1);
Set<String> emp1Lang = new HashSet<String>();
emp1Lang.add("Core Java");
emp1Lang.add("Hibernate");
emp1Lang.add("Spring");
emp1.setComputerLanguage(emp1Lang);
Employee emp2 = new Employee();
emp2.setEmpName("Sourav");
Set<String> emp2Lang = new HashSet<String>();
emp2.setDeptId(1);
emp2Lang.add("Core Java");
emp2Lang.add("EJB 3");
emp2Lang.add("Spring");
emp2.setComputerLanguage(emp2Lang);
employees.add(emp1);
employees.add(emp2);
dept.setEmployees(employees);
session.save(dept);
trans.commit();
System.out.println("Done");
}
}
Error
Code:
Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.entity.Department.deptId
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:183)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3591)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:3307)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:512)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:80)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:456)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:334)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:121)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at com.entity.MainClass.main(MainClass.java:60)
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 46 more
Please help me.
A little-bit of your time would help me to learn.Thanks in Advance