[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-6636) Properties listed inside "<properties>" tag are not audited

Andrey Kovalev (JIRA) noreply at atlassian.com
Tue Sep 6 11:28:02 EDT 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6636?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43460#comment-43460 ] 

Andrey Kovalev commented on HHH-6636:
-------------------------------------

The solution to this problem was:

Fixed. In case anybody needs the answer:

The problem was that envers ignored whatever was written inside the properties tag. When I removed the tag this way:

    <properties name="uniqueProps" unique="true">
        <property name="containerId" index="ParamValsContainerIdIndx"/>
        <property name="parameterId" index="ParamValsParamIdIndx"/>
        <property name="containerType" column="CONTAINER_TYPE">
            <type name="org.hibernate.type.EnumType">
                <param name="enumClass">platform.server.dataservices.model.ContainerType</param>
                <param name="type">4</param>
            </type>
        </property>
    </properties>

Became:

    <property name="containerId" index="ParamValsContainerIdIndx"/>
    <property name="parameterId" index="ParamValsParamIdIndx"/>
    <property name="containerType" column="CONTAINER_TYPE">
      <type name="org.hibernate.type.EnumType">
        <param name="enumClass">platform.server.dataservices.model.ContainerType</param>
        <param name="type">4</param>
      </type>
    </property>

This way, all of the properties became audited, but I still needed the triplet (containerId, parameterId, containerType) to be unique. The final solution was this:

    <property name="containerId" index="ParamValsContainerIdIndx"/>
    <property name="parameterId" index="ParamValsParamIdIndx"/>
    <property name="containerType" column="CONTAINER_TYPE">
      <type name="org.hibernate.type.EnumType">
        <param name="enumClass">platform.server.dataservices.model.ContainerType</param>
        <param name="type">4</param>
      </type>
    </property>

    <properties name="uniqueProps" unique="true">
      <property name="containerId" insert="false" update="false"/>
      <property name="parameterId" insert="false" update="false"/>
      <property name="containerType" insert="false" update="false"/>
    </properties>

> Properties listed inside "<properties>" tag are not audited
> -----------------------------------------------------------
>
>                 Key: HHH-6636
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6636
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: envers
>         Environment: Hibernate 3.6. Found at MySQL 5
>            Reporter: Andrey Kovalev
>
> Here is how the bug was found:
> I am using envers to audit my ParameterToValue entity. Its properties "containerId", "containerType", "parameterId" which do appear as columns in a mapped DB table "values_for_params" (a regular Hibernate table), are missing at the envers generated "values_for_params_AUD" DB table. I need the ability to get historic "value" for given (containerId, containerType, parameterId).
> **The ParameterToValue  class:**
>     @Audited
>     public class ParameterToValue extends BasicValueHolder {
>     private Long containerId;
>     private ContainerType containerType;
> 	private Long parameterId;
>     public ParameterToValue(ContainerID containerId, Long parameterId, Value value) {
>         super(value);
>         this.containerId = containerId.getContainerId();
>         this.parameterId = parameterId;
>         containerType = containerId.getContainerType();
>     }
>     ParameterToValue() {
>     }
>     public Long getParameterId() {
>         return parameterId;
>     }
>     public void setParameterId(Long parameterId) {
>         this.parameterId = parameterId;
>     }
>     public Value getValue() {
>         return value;
>     }
>     public void setValue(Value value) {
>         this.value = value;
>     }
>     public Long getContainerId() {
>         return containerId;
>     }
>     public void setContainerId(Long containerId) {
>         this.containerId = containerId;
>     }
>     public ContainerType getContainerType() {
>         return containerType;
>     }
>     public void setContainerType(ContainerType containerType) {
>         this.containerType = containerType;
>     }
>     }
>   
> **The Hibernate mapping definition:**
>     <class name="platform.server.dataservices.model.ParameterToValue" table="values_for_params">
>         <cache usage="read-write" include="all" />
>         <id name="id" column="ID">
>             <generator class="native"/>
>         </id>
>         <properties name="uniqueProps" unique="true">
>             <property name="containerId" index="ParamValsContainerIdIndx"/>
>             <property name="parameterId" index="ParamValsParamIdIndx"/>
>             <property name="containerType" column="CONTAINER_TYPE">
>                 <type name="org.hibernate.type.EnumType">
>                     <param name="enumClass">platform.server.dataservices.model.ContainerType</param>
>                     <param name="type">4</param>
>                     <!-- 12 = string, 5 = smallint, 4 = integer, default 4 -->
>                 </type>
>             </property>
>         </properties>
>         <many-to-one name="value" cascade="all" lazy="false" unique="true" index="PRM_VAL_IDX"/>
>     </class>
> **SHOW CREATE TABLE `values_for_params` in MySQL:**
>     CREATE TABLE `values_for_params` (
>       ID` bigint(20) NOT NULL AUTO_INCREMENT,
>       `containerId` bigint(20) DEFAULT NULL,
>       `parameterId` bigint(20) DEFAULT NULL,
>       `CONTAINER_TYPE` int(11) DEFAULT NULL,
>       `value` bigint(20) DEFAULT NULL,
>     PRIMARY KEY (`ID`),
>     UNIQUE KEY `value` (`value`),
>     UNIQUE KEY `containerId` (`containerId`,`parameterId`,`CONTAINER_TYPE`),
>     KEY `ParamValsParamIdIndx` (`parameterId`),
>     KEY `ParamValsContainerIdIndx` (`containerId`),
>     KEY `PRM_VAL_IDX` (`value`),
>     KEY `FKE02CB4F981565307` (`value`),
>     CONSTRAINT `FKE02CB4F981565307` FOREIGN KEY (`value`) REFERENCES `value` (`ID`)
>     ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8
> **SHOW CREATE TABLE `values_for_params_AUD` in MySQL:**
>     CREATE TABLE `values_for_params_AUD` (
>       `ID` bigint(20) NOT NULL,
>       `REV` int(11) NOT NULL,
>       `REVTYPE` tinyint(4) DEFAULT NULL,
>       `value` bigint(20) DEFAULT NULL,
>     PRIMARY KEY (`ID`,`REV`),
>     KEY `FKE093BE4AEB88DFB` (`REV`),
>     CONSTRAINT `FKE093BE4AEB88DFB` FOREIGN KEY (`REV`) REFERENCES `DesignRevisionEntity`     (`id`)
>     ) ENGINE=InnoDB DEFAULT CHARSET=utf8

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list