[hibernate-issues] [Hibernate-JIRA] Created: (HHH-3151) using property-ref and not-null="true" simultaneously in collection <key> element crashes with ArgumentIllegalException

boris schukin (JIRA) noreply at atlassian.com
Mon Mar 3 07:59:33 EST 2008


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 at 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.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list