using property-ref and not-null="true" simultaneously in collection <key>
element crashes with ArgumentIllegalException
-----------------------------------------------------------------------------------------------------------------------
Key: HHH-3151
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-3151
Project: Hibernate3
Issue Type: Bug
Components: core
Affects Versions: 3.2.5
Environment: hibernate 3.2.5
Reporter: boris schukin
Example:
Let's we have one class "MetaMethod" and second class
"MetaParameter" .
Class MetaMethod has a list of MetaParameters.
Corresponding tables are:
CREATE TABLE META_METHOD
(ID VARCHAR2(50) NOT NULL
,CODE VARCHAR2(40) NOT NULL
,BCN_CODE VARCHAR2(40) NOT NULL
,NAME VARCHAR2(100)
)
ALTER TABLE META_METHOD ADD (CONSTRAINT SK_BFN_PK PRIMARY KEY (ID))
ALTER TABLE META_METHOD ADD (CONSTRAINT SK_BFN_UK1 UNIQUE (CODE ,BCN_CODE))
CREATE TABLE META_PARAMETER
(ID VARCHAR2(50) NOT NULL
,BFN_CODE VARCHAR2(40) NOT NULL
,BCN_CODE VARCHAR2(40) NOT NULL
,SEQUENCE_NUMBER NUMBER(4,0) NOT NULL
,TYPE VARCHAR2(255) NOT NULL
)
ALTER TABLE META_PARAMETER ADD (CONSTRAINT SK_BFA_PK PRIMARY KEY (ID))
ALTER TABLE META_PARAMETER ADD (CONSTRAINT SK_BFA_UK1 UNIQUE (BFN_CODE, BCN_CODE
,SEQUENCE_NUMBER))
ALTER TABLE META_PARAMETER ADD (CONSTRAINT SK_BFA_BFN_FK1 FOREIGN KEY (BFN_CODE
,BCN_CODE) REFERENCES META_METHOD (CODE ,BCN_CODE))
You see, the foreign key (BFN_CODE ,BCN_CODE) on the table META_PARAMETER is organized
by native key (CODE ,BCN_CODE) of the META_METHOD table.
Structure of classes is simple (in my opinion), so i introduce the hibernate mappings:
<class name="com.stinscoman.kernel.api.meta.MetaMethod"
table="META_METHOD" >
<id name="id" column="ID" length="40"
type="long">
<generator class="assigned" />
</id>
<properties name="theKey" unique="true">
<property name="code" column="CODE"
not-null="true"/>
<property name="bc" column="BCN_CODE"
not-null="true" />
</properties>
<property name="name" column="NAME" />
<list name="parameters" cascade="all-delete-orphan">
<key property-ref="theKey" not-null="true"
update="false">
<column name="BFN_CODE" not-null="true"/>
<column name="BCN_CODE" not-null="true"/>
</key>
<list-index column="SEQUENCE_NUMBER" />
<one-to-many
class="com.stinscoman.kernel.api.meta.MetaParameter"/>
</list>
</class>
<class name="com.stinscoman.kernel.api.meta.MetaParameter"
table="SK_BFN_ARGUMENT">
<id name="id" column="ID" length="40"
type="long">
<generator class="assigned"/>
</id>
</class>
Now, somewhere in hibernate session, i try to put a parameter to method
MetaMethod method = ... <the code to obtain MetaMethod object>
MetaParameter param = ... <the code to obtain MetaParameter object>
method.getParameters().add( param );
Ok. When session is flushing i always have:
Caused by: org.hibernate.PropertyAccessException: IllegalArgumentException occurred
calling getter of com.stinscoman.kernel.api.meta.MetaMethod.code
at
org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:171)
at
org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValue(AbstractComponentTuplizer.java:64)
at
org.hibernate.tuple.component.AbstractComponentTuplizer.getPropertyValues(AbstractComponentTuplizer.java:70)
at
org.hibernate.tuple.component.PojoComponentTuplizer.getPropertyValues(PojoComponentTuplizer.java:83)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:353)
at org.hibernate.type.ComponentType.getPropertyValues(ComponentType.java:348)
at
org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:77)
at
org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:47)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:282)
...
Caused by: java.lang.IllegalArgumentException: java.lang.ClassCastException@75a0c6
at sun.reflect.GeneratedMethodAccessor79.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.hibernate.property.BasicPropertyAccessor$BasicGetter.get(BasicPropertyAccessor.java:145)
... 70 more
As i understand, the problem is in property-ref and not-null="true"
simultaneously in collection <key> element.
--
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....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira