Saving hibernate object throws IllegalArgumentException
gbrasher Jul 4, 2005 6:23 PMI'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; } }