1 Reply Latest reply on Jul 5, 2005 2:24 PM by Gary Brasher

    Saving hibernate object throws IllegalArgumentException

    Gary Brasher Newbie

      I'm attempting to save a hibernate-generated class in a servlet using jboss 4.0.2 and the Java 1.5.0.03 jdk. Can anyone shed light on why the following doPost method fails at (1) below with an IllegalArgumentException exception (ERROR [BasicPropertyAccessor] expected type: java.lang.Long, actual value: java.lang.Long)? I've included the console output, server.log, Address.hbm.xml, hibernate-service.xml, and the generated Address.java. Thanks in advance.

      public class DataServlet extends HttpServlet {
      
       protected void doPost(
       HttpServletRequest request,
       HttpServletResponse response) throws ServletException, IOException {
       ...
       try {
       session = HibernateUtil.currentSession();
       tx = session.beginTransaction();
       Address address = new Address();
       address.setStreet("home");
      (1) session.save(address);
       tx.commit();
       } catch(PropertyAccessException e){
      (2) szErrorMsg = e.getMessage();
       tx.rollback();
       } finally {
       }
       ...
      

      e.getMessage() at (2) above returns ...
      ---------------------------------------------
      IllegalArgumentException occurred while calling setter of testweb1.data.Address.id

      Eclipse 3.0.2 console shows ...
      -----------------------------------
      16:59:13,699 ERROR [BasicPropertyAccessor] IllegalArgumentException in class: testweb1.data.Address, setter method of property: id
      16:59:13,699 ERROR [BasicPropertyAccessor] expected type: java.lang.Long, actual value: java.lang.Long

      D:\JBoss\jboss-4.0.2\server\default\log\server.log (snippet) ...
      -------------------------------------------------------------------------
      2005-07-04 16:59:06,509 DEBUG [org.hibernate.impl.SessionFactoryObjectFactory] JNDI lookup: hibernate/TestWeb1SessionFactory
      2005-07-04 16:59:06,509 DEBUG [org.hibernate.impl.SessionFactoryObjectFactory] lookup: uid=402881e404e3db4f0104e3dbdf3a0001
      2005-07-04 16:59:06,799 DEBUG [org.hibernate.jdbc.JDBCContext] no active transaction, could not register Synchronization
      2005-07-04 16:59:06,799 DEBUG [org.hibernate.impl.SessionImpl] opened session at timestamp: 4589626763464704
      2005-07-04 16:59:10,204 DEBUG [org.hibernate.transaction.JTATransaction] begin
      2005-07-04 16:59:10,214 DEBUG [org.hibernate.transaction.JTATransaction] Looking for UserTransaction under: UserTransaction
      2005-07-04 16:59:10,234 DEBUG [org.hibernate.transaction.JTATransaction] Obtained UserTransaction
      2005-07-04 16:59:10,234 DEBUG [org.hibernate.transaction.JTATransaction] Began a new JTA transaction
      2005-07-04 16:59:10,254 DEBUG [org.hibernate.jdbc.JDBCContext] successfully registered Synchronization
      2005-07-04 16:59:13,659 DEBUG [org.hibernate.event.def.DefaultSaveOrUpdateEventListener] saving transient instance
      2005-07-04 16:59:13,669 DEBUG [org.hibernate.jdbc.AbstractBatcher] opening JDBC connection
      2005-07-04 16:59:13,669 DEBUG [org.hibernate.id.IncrementGenerator] fetching initial value: select max(ADDRESS_ID) from ADDRESS
      2005-07-04 16:59:13,669 DEBUG [org.hibernate.SQL] select max(ADDRESS_ID) from ADDRESS
      2005-07-04 16:59:13,679 DEBUG [org.hibernate.id.IncrementGenerator] first free id: 1
      2005-07-04 16:59:13,679 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] generated identifier: 1, using strategy: org.hibernate.id.IncrementGenerator
      2005-07-04 16:59:13,689 DEBUG [org.hibernate.event.def.AbstractSaveEventListener] saving [testweb1.data.Address#1]
      2005-07-04 16:59:13,699 ERROR [org.hibernate.property.BasicPropertyAccessor] IllegalArgumentException in class: testweb1.data.Address, setter method of property: id
      2005-07-04 16:59:13,699 ERROR [org.hibernate.property.BasicPropertyAccessor] expected type: java.lang.Long, actual value: java.lang.Long
      2005-07-04 16:59:23,003 DEBUG [org.hibernate.transaction.JTATransaction] rollback
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.transaction.CacheSynchronization] transaction after completion callback, status: 4
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.jdbc.JDBCContext] after transaction completion
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.impl.SessionImpl] after transaction completion
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.transaction.CacheSynchronization] automatically closing session
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.impl.SessionImpl] automatically closing session
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.impl.SessionImpl] closing session
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.jdbc.AbstractBatcher] closing JDBC connection (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.jdbc.JDBCContext] after transaction completion
      2005-07-04 16:59:23,013 DEBUG [org.hibernate.impl.SessionImpl] after transaction completion
      2005-07-04 16:59:23,023 DEBUG [org.hibernate.transaction.JTATransaction] Rolled back JTA UserTransaction

      Address.hbm.xml
      --------------------
      <?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 package="testweb1.data">
       <class name="Address" table="ADDRESS">
       <id name="id" type="long" column="ADDRESS_ID">
       <generator class="increment"/>
       </id>
       <property name="street" type="string" column="STREET"/>
       </class>
      
      </hibernate-mapping>
      

      hibernate-service.xml
      -------------------------
      <?xml version="1.0" encoding="UTF-8"?>
      <server>
       <mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=Hibernate">
       <attribute name="DatasourceName">java:/DefaultDS</attribute>
       <attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute>
       <attribute name="SessionFactoryName">
       java:/hibernate/TestWeb1SessionFactory
       </attribute>
       <attribute name="CacheProviderClass">
       org.hibernate.cache.HashtableCacheProvider
       </attribute>
       <attribute name="Hbm2ddlAuto">create</attribute>
      <!-- <attribute name="ShowSqlEnabled">true</attribute> -->
       <attribute name="ReflectionOptimizationEnabled">false</attribute>
       </mbean>
      </server>
      

      Address.java
      ---------------
      package testweb1.data;
      
      import java.util.*;
      
      
      
      
      /**
       * Address generated by hbm2java
       */
      public class Address implements java.io.Serializable {
      
       // Fields
      
       private Long id;
       private String street;
      
      
       // Constructors
      
       /** default constructor */
       public Address() {
       }
      
       /** constructor with id */
       public Address(Long id) {
       this.id = id;
       }
      
      
      
      
       // Property accessors
      
       /**
       *
       */
       public Long getId() {
       return this.id;
       }
      
       public void setId(Long id) {
       this.id = id;
       }
      
       /**
       *
       */
       public String getStreet() {
       return this.street;
       }
      
       public void setStreet(String street) {
       this.street = street;
       }
      
      
      
      }