[jboss-jira] [JBoss JIRA] Created: (HIBERNATE-115) Bug in AbstractEntityPersister for generated version properties

Juergen W (JIRA) jira-events at lists.jboss.org
Mon Jun 22 09:26:10 EDT 2009


Bug in AbstractEntityPersister for generated version properties
---------------------------------------------------------------

                 Key: HIBERNATE-115
                 URL: https://jira.jboss.org/jira/browse/HIBERNATE-115
             Project: Hibernate
          Issue Type: Bug
         Environment: Jboss 4.2.3 GA, Hibernate 3.3.1, MSSQL Server 2005, actual Merlia DB Driver 7.0.5
            Reporter: Juergen W
            Assignee: Steve Ebersole


Following problem:

we're using following configuration for our entities (dynamic-update="true" , dynamic-insert="true" , select-before-update="true", the version property is generated by the database and is read-only )

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="de.xxx.xxx.Angebot"  
   table="ANGeBot" 
   dynamic-update="true"  
   dynamic-insert="true" 
   select-before-update="true">
 
<id name="angbId" type="java.lang.Integer" column="ANGB_ID" unsaved-value="0">
	<generator class="identity"/>
</id>
     <version name="Timestamp" type="binary" column="ANGB_Timestamp" generated="always" insert="false" unsaved-value="undefined"/>  

	<property name="Aenderungsdatum" column="ANGB_Aenderungsdatum" type="java.util.Date" length="23"/>
	<property name="Aenderungsperson" column="ANGB_Aenderungsperson" type="java.lang.String" length="30"/>
	<property name="AnbieterAnsprechpartner" column="ANGB_Anbieter_Ansprechpartner" type="java.lang.String" length="100"/>

       ... additional props...
</class>
</hibernate-mapping>


If we made some changes to a row, hibernate should update only the "dirty fields" and NOT the version field. But hibernate tries to update the version property too, and thus we got the  db exception, the version column is not updateable.

Hibernate generates following updatestatement, if we change the field ANGB_ANBIETER_ANSPRECHPARTNER

 UPDATE
            V_AMVW_ANGEBOT
        SET
            ANGB_TIMESTAMP=?,    <----  THATs WRONG
            ANGB_ANBIETER_ANSPRECHPARTNER=?
        WHERE
            ANGB_ID=?
            AND ANGB_TIMESTAMP=?


I think, in the org.hibernate.persister.entity.AbstractEntityPersister in the method getPropertiesToUpdate() following "if statement" is missing if the version property is generated:

		if ( isVersioned()) {
			propsToUpdate[ getVersionProperty() ] =
				Versioning.isVersionIncrementRequired( dirtyProperties, hasDirtyCollection, getPropertyVersionability() );
		}


If I change the "if" statement to following:

		if ( isVersioned() && !isVersionPropertyGenerated()) {
			propsToUpdate[ getVersionProperty() ] =
				Versioning.isVersionIncrementRequired( dirtyProperties, hasDirtyCollection, getPropertyVersionability() );
		}

than it is working


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list