]
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: