These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Newbie got stuck in Hibernate Mapping
PostPosted: Sun Feb 07, 2010 3:51 pm 
Newbie

Joined: Sun Feb 07, 2010 3:44 pm
Posts: 1
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


Top
 Profile  
 
 Post subject: Re: Newbie got stuck in Hibernate Mapping
PostPosted: Mon Feb 08, 2010 4:29 am 
Expert
Expert

Joined: Wed Mar 03, 2004 6:35 am
Posts: 1240
Location: Lund, Sweden
One thing that I noted is that you have a mismatch between the <many-to-one name="deptId"....> mapping and your code in the Employee class. First, rename the <many-to-one> mapping.

Code:
<many-to-one name="department" class="com.entity.Department" ...


You should also add inverse="true" to the <set> mapping for the Department class.

Code:
<set name="employees" inverse="true" ...


Then, replace the Employee.deptId/getDeptId()/setDeptId() with:

Code:
private Department department;
public Department getDepartment()
{
  return department;
}
public void setDepartment(Department department)
{
  this.department = department;
}


I don't know if this is causing the error or not, but it needs to be fixed in any case.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.