Hello !
I'm having a problem when loading POJP with Hibernate : I get an IllegalArgumentException. Google tells me that it is a common problem, but I still cant find the solution. I checked the Types : my ID is java.lang.Long, both in the mapping and in the Java class. Might it be a problem with inheritance :
My model is like this : a Publication (abstract) can be either a News or a WebPage. WebPage has a collection of Annexe. The IllegalArgumentException appears to be related to Annexe ...
I'm in the dark, does anybody have some light ?
Thanks !
Hibernate version:
3.1.3
Mapping documents:
Annexe.hbm.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Attention: Generated code! Do not modify by hand!
Generated by: hibernate.hbm.xml.vsl in andromda-hibernate-cartridge.
-->
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-cascade="none">
<class name="com.project.domain.AnnexeImpl" table="ANNEXE" dynamic-insert="false" dynamic-update="false">
<id name="id" type="java.lang.Long" unsaved-value="null">
<column name="ID" sql-type="BIGINT"/>
<generator class="native">
</generator>
</id>
<property name="filename" type="java.lang.String">
<column name="FILENAME" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="description" type="java.lang.String">
<column name="DESCRIPTION" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
</class>
</hibernate-mapping>
Publication.hbm.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Attention: Generated code! Do not modify by hand!
Generated by: hibernate.hbm.xml.vsl in andromda-hibernate-cartridge.
-->
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-cascade="none">
<class name="com.project.domain.PublicationImpl" table="PUBLICATION" dynamic-insert="false" dynamic-update="false">
<id name="id" type="java.lang.Long" unsaved-value="null">
<column name="ID" sql-type="BIGINT"/>
<generator class="native">
</generator>
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="filename" type="java.lang.String">
<column name="FILENAME" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="summary" type="java.lang.String">
<column name="SUMMARY" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="content" type="java.lang.String">
<column name="CONTENT" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="url" type="java.lang.String">
<column name="URL" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="lockedBy" type="java.lang.String">
<column name="LOCKED_BY" not-null="false" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="lockedUntil" type="java.util.Date">
<column name="LOCKED_UNTIL" not-null="false" unique="false" sql-type="DATETIME"/>
</property>
<property name="visible" type="java.lang.Boolean">
<column name="VISIBLE" not-null="true" unique="false" sql-type="TINYINT"/>
</property>
<set name="links" order-by="PUBLICATION_FK" lazy="true" fetch="select" inverse="false" cascade="save-update">
<key foreign-key="LINK_PUBLICATION_FKC">
<column name="PUBLICATION_FK" sql-type="BIGINT"/>
</key>
<one-to-many class="com.project.domain.LinkImpl"/>
</set>
<many-to-one name="summaryImage" class="com.project.domain.ImageImpl" foreign-key="PUBLICATION_SUMMARY_IMAGE_FKC" cascade="save-update" lazy="proxy" fetch="select">
<column name="SUMMARY_IMAGE_FK" not-null="false" sql-type="BIGINT" unique="true"/>
</many-to-one>
<set name="annexes" order-by="PUBLICATION_FK" lazy="true" fetch="select" inverse="false" cascade="save-update">
<key foreign-key="ANNEXE_PUBLICATION_FKC">
<column name="PUBLICATION_FK" sql-type="BIGINT"/>
</key>
<one-to-many class="com.project.domain.AnnexeImpl"/>
</set>
<many-to-one name="language" class="com.project.domain.LanguageImpl" cascade="save-update" foreign-key="PUBLICATION_LANGUAGE_FKC" lazy="proxy" fetch="select">
<column name="LANGUAGE_FK" not-null="true" sql-type="BIGINT"/>
</many-to-one>
<joined-subclass name="com.project.domain.WebPageImpl" table="WEB_PAGE" dynamic-insert="false" dynamic-update="false" abstract="false">
<key foreign-key="WEB_PAGEIFKC">
<column name="ID" sql-type="BIGINT"/>
</key>
<property name="pageType" type="com.project.domain.PageTypeEnum">
<column name="PAGE_TYPE" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="publicationDate" type="java.util.Date">
<column name="PUBLICATION_DATE" not-null="true" unique="false" sql-type="DATETIME"/>
</property>
<property name="metaUsage" type="com.project.domain.MetaUsageEnum">
<column name="META_USAGE" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="metaDescription" type="java.lang.String">
<column name="META_DESCRIPTION" not-null="false" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="metaKeywords" type="java.lang.String">
<column name="META_KEYWORDS" not-null="false" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="bannerUsage" type="com.project.domain.BannerUsageEnum">
<column name="BANNER_USAGE" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<set name="bannerCategories" table="BANNER_CATEGORIES2WEB_PAGES" order-by="BANNER_CATEGORIES_FK" lazy="true" fetch="select" inverse="false" cascade="save-update">
<key foreign-key="SUB_CATEGORY_WEB_PAGES_FKC">
<column name="WEB_PAGES_FK" sql-type="BIGINT"/>
</key>
<many-to-many class="com.project.domain.SubCategoryImpl" foreign-key="WEB_PAGE_BANNER_CATEGORIES_FKC">
<column name="BANNER_CATEGORIES_FK" sql-type="BIGINT"/>
</many-to-many>
</set>
<set name="newsCategories" table="NEWS_CATEGORIES2WEB_PAGES" order-by="NEWS_CATEGORIES_FK" lazy="true" fetch="select" inverse="false" cascade="save-update">
<key foreign-key="SUB_CATEGORY_WEB_PAGES_FKC">
<column name="WEB_PAGES_FK" sql-type="BIGINT"/>
</key>
<many-to-many class="com.project.domain.SubCategoryImpl" foreign-key="WEB_PAGE_NEWS_CATEGORIES_FKC">
<column name="NEWS_CATEGORIES_FK" sql-type="BIGINT"/>
</many-to-many>
</set>
<many-to-one name="meta" class="com.project.domain.MetaImpl" cascade="save-update" foreign-key="WEB_PAGE_META_FKC" lazy="proxy" fetch="select">
<column name="META_FK" not-null="false" sql-type="BIGINT"/>
</many-to-one>
<many-to-one name="menuItem" class="com.project.domain.MenuItemImpl" foreign-key="WEB_PAGE_MENU_ITEM_FKC" cascade="save-update" lazy="proxy" fetch="select">
<column name="MENU_ITEM_FK" not-null="false" sql-type="BIGINT" unique="true"/>
</many-to-one>
<set name="compliances" table="COMPLIANCES2WEB_PAGES" order-by="COMPLIANCES_FK" lazy="true" fetch="select" inverse="false" cascade="save-update">
<key foreign-key="COMPLIANCE_WEB_PAGES_FKC">
<column name="WEB_PAGES_FK" sql-type="BIGINT"/>
</key>
<many-to-many class="com.project.domain.ComplianceImpl" foreign-key="WEB_PAGE_COMPLIANCES_FKC">
<column name="COMPLIANCES_FK" sql-type="BIGINT"/>
</many-to-many>
</set>
<set name="banners" table="BANNERS2WEB_PAGES" order-by="BANNERS_FK" lazy="true" fetch="select" inverse="false" cascade="save-update">
<key foreign-key="BANNER_WEB_PAGES_FKC">
<column name="WEB_PAGES_FK" sql-type="BIGINT"/>
</key>
<many-to-many class="com.project.domain.BannerImpl" foreign-key="WEB_PAGE_BANNERS_FKC">
<column name="BANNERS_FK" sql-type="BIGINT"/>
</many-to-many>
</set>
<many-to-one name="site" class="com.project.domain.SiteImpl" cascade="save-update" foreign-key="WEB_PAGE_SITE_FKC" lazy="proxy" fetch="select">
<column name="SITE_FK" not-null="true" sql-type="BIGINT"/>
</many-to-one>
</joined-subclass>
<joined-subclass name="com.project.domain.NewsImpl" table="NEWS" dynamic-insert="false" dynamic-update="false" abstract="false">
<key foreign-key="NEWSIFKC">
<column name="ID" sql-type="BIGINT"/>
</key>
<property name="beginPublication" type="java.util.Date">
<column name="BEGIN_PUBLICATION" not-null="true" unique="false" sql-type="DATETIME"/>
</property>
<property name="endPublication" type="java.util.Date">
<column name="END_PUBLICATION" not-null="true" unique="false" sql-type="DATETIME"/>
</property>
<property name="subTitle" type="java.lang.String">
<column name="SUB_TITLE" not-null="false" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="summaryHome" type="java.lang.String">
<column name="SUMMARY_HOME" not-null="true" unique="false" sql-type="VARCHAR(255) BINARY"/>
</property>
<property name="visibleHome" type="java.lang.Boolean">
<column name="VISIBLE_HOME" not-null="true" unique="false" sql-type="TINYINT"/>
</property>
<property name="showDate" type="java.lang.Boolean">
<column name="SHOW_DATE" not-null="true" unique="false" sql-type="TINYINT"/>
</property>
<many-to-one name="subCategory" class="com.project.domain.SubCategoryImpl" cascade="save-update" foreign-key="NEWS_SUB_CATEGORY_FKC" lazy="proxy" fetch="select">
<column name="SUB_CATEGORY_FK" not-null="true" sql-type="BIGINT"/>
</many-to-one>
<set name="sites" table="NEWS2SITES" order-by="SITES_FK" lazy="true" fetch="select" inverse="false" cascade="save-update">
<key foreign-key="SITE_NEWS_FKC">
<column name="NEWS_FK" sql-type="BIGINT"/>
</key>
<many-to-many class="com.project.domain.SiteImpl" foreign-key="NEWS_SITES_FKC">
<column name="SITES_FK" sql-type="BIGINT"/>
</many-to-many>
</set>
<many-to-one name="parent" class="com.project.domain.NewsImpl" cascade="save-update" foreign-key="NEWS_PARENT_FKC" lazy="proxy" fetch="select">
<column name="PARENT_FK" not-null="false" sql-type="BIGINT"/>
</many-to-one>
<set name="children" order-by="PARENT_FK" lazy="true" fetch="select" inverse="true" cascade="none">
<key foreign-key="NEWS_PARENT_FKC">
<column name="PARENT_FK" sql-type="BIGINT"/>
</key>
<one-to-many class="com.project.domain.NewsImpl"/>
</set>
</joined-subclass>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
final java.util.Collection results = this.getHibernateTemplate().loadAll(com.project.domain.WebPageImpl.class);
this.transformEntities(transform, results);
Full stack trace of any exception that occurs:Code:
org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException occurred calling getter of com.project.domain.Annexe.id; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.project.domain.Annexe.id
org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.project.domain.Annexe.id
at org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at org.hibernate.tuple.AbstractEntityTuplizer.getIdentifier(AbstractEntityTuplizer.java:176)
at org.hibernate.persister.entity.AbstractEntityPersister.getIdentifier(AbstractEntityPersister.java:3257)
at org.hibernate.persister.entity.AbstractEntityPersister.isTransient(AbstractEntityPersister.java:2983)
at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.getEntityState(AbstractSaveEventListener.java:460)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:84)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:502)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:494)
at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108)
at org.hibernate.engine.Cascade.cascade(Cascade.java:248)
at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:130)
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:121)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:500)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:266)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy28.getAllWebPageVO(Unknown Source)
at com.project.services.WebPageServiceTest.test(WebPageServiceTest.java:32)
Name and version of the database you are using:MySQL 4.1.9
The generated SQL (show_sql=true):Code:
Hibernate: select this_.ID as ID3_0_, this_1_.TITLE as TITLE3_0_, this_1_.FILENA
ME as FILENAME3_0_, this_1_.SUMMARY as SUMMARY3_0_, this_1_.CONTENT as CONTENT3_
0_, this_1_.AUTHOR as AUTHOR3_0_, this_1_.URL as URL3_0_, this_1_.LOCKED_BY as L
OCKED8_3_0_, this_1_.LOCKED_UNTIL as LOCKED9_3_0_, this_1_.VISIBLE as VISIBLE3_0
_, this_1_.SUMMARY_IMAGE_FK as SUMMARY11_3_0_, this_1_.LANGUAGE_FK as LANGUAGE12
_3_0_, this_.PAGE_TYPE as PAGE2_4_0_, this_.PUBLICATION_DATE as PUBLICAT3_4_0_,
this_.META_USAGE as META4_4_0_, this_.META_DESCRIPTION as META5_4_0_, this_.META
_KEYWORDS as META6_4_0_, this_.BANNER_USAGE as BANNER7_4_0_, this_.META_FK as ME
TA8_4_0_, this_.MENU_ITEM_FK as MENU9_4_0_, this_.SITE_FK as SITE10_4_0_ from WE
B_PAGE this_ inner join PUBLICATION this_1_ on this_.ID=this_1_.ID
Hibernate: select menuitemim0_.ID as ID13_0_, menuitemim0_.LABEL as LABEL13_0_,
menuitemim0_.VISIBLE as VISIBLE13_0_, menuitemim0_.PARENT_FK as PARENT4_13_0_, m
enuitemim0_1_.LANGUAGE_FK as LANGUAGE2_14_0_, menuitemim0_1_.SITE_FK as SITE3_14
_0_, case when menuitemim0_1_.ID is not null then 1 when menuitemim0_.ID is not
null then 0 end as clazz_0_ from MENU_ITEM menuitemim0_ left outer join ROOT_MEN
U menuitemim0_1_ on menuitemim0_.ID=menuitemim0_1_.ID where menuitemim0_.ID=?
Hibernate: select webpageimp0_.ID as ID3_0_, webpageimp0_1_.TITLE as TITLE3_0_,
webpageimp0_1_.FILENAME as FILENAME3_0_, webpageimp0_1_.SUMMARY as SUMMARY3_0_,
webpageimp0_1_.CONTENT as CONTENT3_0_, webpageimp0_1_.AUTHOR as AUTHOR3_0_, webp
ageimp0_1_.URL as URL3_0_, webpageimp0_1_.LOCKED_BY as LOCKED8_3_0_, webpageimp0
_1_.LOCKED_UNTIL as LOCKED9_3_0_, webpageimp0_1_.VISIBLE as VISIBLE3_0_, webpage
imp0_1_.SUMMARY_IMAGE_FK as SUMMARY11_3_0_, webpageimp0_1_.LANGUAGE_FK as LANGUA
GE12_3_0_, webpageimp0_.PAGE_TYPE as PAGE2_4_0_, webpageimp0_.PUBLICATION_DATE a
s PUBLICAT3_4_0_, webpageimp0_.META_USAGE as META4_4_0_, webpageimp0_.META_DESCR
IPTION as META5_4_0_, webpageimp0_.META_KEYWORDS as META6_4_0_, webpageimp0_.BAN
NER_USAGE as BANNER7_4_0_, webpageimp0_.META_FK as META8_4_0_, webpageimp0_.MENU
_ITEM_FK as MENU9_4_0_, webpageimp0_.SITE_FK as SITE10_4_0_ from WEB_PAGE webpag
eimp0_ inner join PUBLICATION webpageimp0_1_ on webpageimp0_.ID=webpageimp0_1_.I
D where webpageimp0_.MENU_ITEM_FK=?
Hibernate: select imageimpl0_.ID as ID17_0_, imageimpl0_.FILENAME as FILENAME17_
0_ from IMAGE imageimpl0_ where imageimpl0_.ID=?
Hibernate: select newscatego0_.WEB_PAGES_FK as WEB1_1_, newscatego0_.NEWS_CATEGO
RIES_FK as NEWS2_1_, subcategor1_.ID as ID1_0_, subcategor1_.TITLE as TITLE1_0_,
subcategor1_.CATEGORY_FK as CATEGORY3_1_0_ from NEWS_CATEGORIES2WEB_PAGES newsc
atego0_ left outer join SUB_CATEGORY subcategor1_ on newscatego0_.NEWS_CATEGORIE
S_FK=subcategor1_.ID where newscatego0_.WEB_PAGES_FK=? order by newscatego0_.NEW
S_CATEGORIES_FK
Hibernate: select banners0_.WEB_PAGES_FK as WEB1_1_, banners0_.BANNERS_FK as BAN
NERS2_1_, bannerimpl1_.ID as ID22_0_, bannerimpl1_.NAME as NAME22_0_, bannerimpl
1_.CONTENT as CONTENT22_0_, bannerimpl1_.SUB_CATEGORY_FK as SUB4_22_0_, bannerim
pl1_.LANGUAGE_FK as LANGUAGE5_22_0_, bannerimpl1_.WEB_PAGE_FK as WEB6_22_0_, ban
nerimpl1_.FLASH_FK as FLASH7_22_0_ from BANNERS2WEB_PAGES banners0_ left outer j
oin BANNER bannerimpl1_ on banners0_.BANNERS_FK=bannerimpl1_.ID where banners0_.
WEB_PAGES_FK=? order by banners0_.BANNERS_FK
Hibernate: select bannercate0_.WEB_PAGES_FK as WEB1_1_, bannercate0_.BANNER_CATE
GORIES_FK as BANNER2_1_, subcategor1_.ID as ID1_0_, subcategor1_.TITLE as TITLE1
_0_, subcategor1_.CATEGORY_FK as CATEGORY3_1_0_ from BANNER_CATEGORIES2WEB_PAGES
bannercate0_ left outer join SUB_CATEGORY subcategor1_ on bannercate0_.BANNER_C
ATEGORIES_FK=subcategor1_.ID where bannercate0_.WEB_PAGES_FK=? order by bannerca
te0_.BANNER_CATEGORIES_FK
Hibernate: select compliance0_.WEB_PAGES_FK as WEB1_1_, compliance0_.COMPLIANCES
_FK as COMPLIAN2_1_, compliance1_.ID as ID18_0_, compliance1_.NAME as NAME18_0_,
compliance1_.CONTENT as CONTENT18_0_, compliance1_.LANGUAGE_FK as LANGUAGE4_18_
0_ from COMPLIANCES2WEB_PAGES compliance0_ left outer join COMPLIANCE compliance
1_ on compliance0_.COMPLIANCES_FK=compliance1_.ID where compliance0_.WEB_PAGES_F
K=? order by compliance0_.COMPLIANCES_FK
Hibernate: select links0_.PUBLICATION_FK as PUBLICAT5_1_, links0_.ID as ID1_, li
nks0_.ID as ID15_0_, links0_.TITLE as TITLE15_0_, links0_.URL as URL15_0_, links
0_.WEB_PAGE_FK as WEB4_15_0_ from LINK links0_ where links0_.PUBLICATION_FK=? or
der by links0_.PUBLICATION_FK
Hibernate: select annexes0_.PUBLICATION_FK as PUBLICAT4_1_, annexes0_.ID as ID1_
, annexes0_.ID as ID24_0_, annexes0_.FILENAME as FILENAME24_0_, annexes0_.DESCRI
PTION as DESCRIPT3_24_0_ from ANNEXE annexes0_ where annexes0_.PUBLICATION_FK=?
order by annexes0_.PUBLICATION_FK
Debug level Hibernate log excerpt:Code:
IllegalArgumentException in class: com.project.domain.Annexe, getter method of property: id