[hibernate-issues] [Hibernate-JIRA] Closed: (HHH-535) properties element causes exception in interface/abstract class
Steve Ebersole (JIRA)
noreply at atlassian.com
Mon Mar 21 13:01:11 EDT 2011
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-535?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steve Ebersole closed HHH-535.
------------------------------
Closing stale resolved issues
> properties element causes exception in interface/abstract class
> ---------------------------------------------------------------
>
> Key: HHH-535
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-535
> Project: Hibernate Core
> Issue Type: Bug
> Components: core
> Affects Versions: 3.0.3
> Environment: Hibernate version: 3.0.3
> Reporter: Jason Boutwell
> Assignee: Steve Ebersole
> Fix For: 3.2.0.alpha2, 3.1.3
>
>
> I am using the <properties> element to map some legacy data. It appears that Hibernate is trying to create a component POJO for the <properties> element with the type of the enclosing class, which is an interface. Is this expected behavior?
> <hibernate-mapping>
> <class name="Address" table="ADDRESS" proxy="Address">
> <meta attribute="interface" inherit="false">true</meta>
> <id name="addressId" type="long" column="ADDRESS_ID"/>
> <discriminator column="ADDRESS_TYPE" type="string" length="30" />
> <properties name="uniqueAddress">
> <property name="addressType" column="ADDRESS_TYPE" type="string" insert="false" update="false" length="30" />
> <many-to-one name="server" column="SERVER_ID" class="Server" not-null="true" />
> </properties>
> <subclass name="AddressImpl" discriminator-value="null" proxy="Address">
> </subclass>
> </class>
> <class name="Server" table="SERVER"
> proxy="Server">
> <meta attribute="interface"
> inherit="false">true</meta>
> <id name="serverId" type="long"
> column="SERVER_ID">
> <discriminator column="SERVER_TYPE"
> type="string" length="10"/>
> <property name="serverType" type="string"
> column="SERVER_TYPE" length="10"
> update="false" insert="false"/>
> <subclass name="ServerImpl"
> discriminator-value="null"
> proxy="Server">
> <many-to-one name="address"
> class="AddressImpl"
> property-ref="uniqueAddress"
> cascade="all-delete-orphan"
> unique="true"
> update="false" insert="false">
> <column name="ADDRESS_TYPE"/>
> <column name="SERVER_ID"/>
> </many-to-one>
> </subclass>
> </class>
> </hibernate-mapping>
> When I create a new Server and add a ServerAddress, Hibernate throws an Exception during the cascade, It seems to be trying to instantiate the <properties> "component":
> org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: Address
> org.springframework.orm.hibernate3.HibernateSystemException: Cannot instantiate abstract class or interface: Address; nested exception is org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: Addressorg.hibernate.InstantiationException: Cannot instantiate abstract class or interface: Address at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:56) at org.hibernate.tuple.AbstractComponentTuplizer.instantiate(AbstractComponentTuplizer.java:89) at org.hibernate.type.ComponentType.instantiate(ComponentType.java:344) at org.hibernate.type.ComponentType.deepCopy(ComponentType.java:301) at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:290) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:226) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:159) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:96) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:464) at org.hibernate.engine.Cascades$5.cascade(Cascades.java:154) at org.hibernate.engine.Cascades.cascadeAssociation(Cascades.java:771) at org.hibernate.engine.Cascades.cascade(Cascades.java:720) at org.hibernate.engine.Cascades.cascade(Cascades.java:847) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:331) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:213) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:159) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:184) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:173) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:69) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:477) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:472)
> According to Hibernate DEBUG logs, everything looks to be working until it tries to cascade save the AddressImpl, and it rolls back.
> 2005-05-24 18:27:31,183 DEBUG engine.PersistenceContext - initializing non-lazy collections
> 2005-05-24 18:27:31,190 DEBUG def.DefaultSaveOrUpdateEventListener - saving transient instance
> 2005-05-24 18:27:31,193 DEBUG jdbc.AbstractBatcher - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
> 2005-05-24 18:27:31,194 DEBUG jdbc.AbstractBatcher - select SERVER_INFO_SEQ.nextval from dual
> 2005-05-24 18:27:31,195 DEBUG jdbc.AbstractBatcher - preparing statement
> 2005-05-24 18:27:31,237 DEBUG id.SequenceGenerator - Sequence identifier generated: 203783
> 2005-05-24 18:27:31,237 DEBUG jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
> 2005-05-24 18:27:31,240 DEBUG jdbc.AbstractBatcher - closing statement
> 2005-05-24 18:27:31,241 DEBUG def.AbstractSaveEventListener - generated identifier: 203783, using strategy: org.hibernate.id.SequenceGenerator
> 2005-05-24 18:27:31,244 DEBUG def.AbstractSaveEventListener - saving [ServerImpl#203783]
> 2005-05-24 18:27:31,248 DEBUG engine.Cascades - processing cascade ACTION_SAVE_UPDATE for: ServerImpl
> 2005-05-24 18:27:31,249 DEBUG engine.Cascades$5 - cascading to saveOrUpdate: AddressImpl
> 2005-05-24 18:27:31,254 DEBUG def.AbstractSaveEventListener - transient instance of: AddressImpl
> 2005-05-24 18:27:31,255 DEBUG def.DefaultSaveOrUpdateEventListener - saving transient instance
> 2005-05-24 18:27:31,255 DEBUG jdbc.AbstractBatcher - about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
> 2005-05-24 18:27:31,256 DEBUG jdbc.AbstractBatcher - select SERVER_ADDRESS_SEQ.nextval from dual
> 2005-05-24 18:27:31,257 DEBUG jdbc.AbstractBatcher - preparing statement
> 2005-05-24 18:27:31,264 DEBUG id.SequenceGenerator - Sequence identifier generated: 2007899
> 2005-05-24 18:27:31,266 DEBUG jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
> 2005-05-24 18:27:31,267 DEBUG jdbc.AbstractBatcher - closing statement
> 2005-05-24 18:27:31,268 DEBUG def.AbstractSaveEventListener - generated identifier: 2007899, using strategy: org.hibernate.id.SequenceGenerator
> 2005-05-24 18:27:31,269 DEBUG def.AbstractSaveEventListener - saving [AddressImpl#2007899]
> 2005-05-24 18:27:31,282 DEBUG transaction.JDBCTransaction - rollback
> 2005-05-24 18:27:31,282 DEBUG jdbc.JDBCContext - before transaction completion
> 2005-05-24 18:27:31,283 DEBUG impl.SessionImpl - before transaction completion
> 2005-05-24 18:27:31,284 DEBUG transaction.JDBCTransaction - re-enabling autocommit
> 2005-05-24 18:27:31,285 DEBUG transaction.JDBCTransaction - rolled back JDBC Connection
> 2005-05-24 18:27:31,286 DEBUG jdbc.JDBCContext - after transaction completion
> 2005-05-24 18:27:31,286 DEBUG impl.SessionImpl - after transaction completion
> 2005-05-24 18:27:31,292 DEBUG impl.SessionImpl - closing session
> 2005-05-24 18:27:31,292 DEBUG jdbc.AbstractBatcher - closing JDBC connection (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)
> 2005-05-24 18:27:31,297 DEBUG jdbc.JDBCContext - after transaction completion
> 2005-05-24 18:27:31,297 DEBUG impl.SessionImpl - after transaction completion
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list