[hibernate-issues] [Hibernate-JIRA] Created: (HCANN-27) Audited class with @EmbeddedId and @ManyToOne relationship

Rino Heinen (JIRA) noreply at atlassian.com
Sun Jul 11 19:02:13 EDT 2010


Audited class with @EmbeddedId and @ManyToOne relationship
----------------------------------------------------------

                 Key: HCANN-27
                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HCANN-27
             Project: Hibernate Commons Annotations
          Issue Type: Bug
    Affects Versions: 3.2.0
         Environment: Hibernate Version: 3.5.3
DataBase: MySQL 5.1.37
Driver JDBC version: 5.1.12
            Reporter: Rino Heinen


Hi,

there is a problem when a class is @Audited and this has an @EmbeddedId (only when the Embeddable class has ManyToOne relationship).

Example code:

persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="TestAuditPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
      <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
      <property name="hibernate.connection.username" value="root"/>
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <property name="hibernate.connection.password" value=""/>
      <property name="hibernate.connection.url" value="jdbc:mysql://192.168.0.6:3306/idm"/>
      <property name="hibernate.ejb.event.post-insert"
                  value="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener" />
        <property name="hibernate.ejb.event.post-update"
                  value="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener" />
        <property name="hibernate.ejb.event.post-delete"
                  value="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener" />
        <property name="hibernate.ejb.event.pre-collection-update"
                  value="org.hibernate.envers.event.AuditEventListener" />
        <property name="hibernate.ejb.event.pre-collection-remove"
                  value="org.hibernate.envers.event.AuditEventListener" />
        <property name="hibernate.ejb.event.post-collection-recreate"
                  value="org.hibernate.envers.event.AuditEventListener" />
    </properties>
  </persistence-unit>
</persistence>

Class A:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package testaudit;

import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.envers.Audited;

/**
*
* @author heir
*/
@Entity
@Table(name="tblA")
@Audited
public class A implements Serializable {
    @Id
    private String name;

    @OneToMany(mappedBy="bpk.a")
    private java.util.List<B> bs;

    public A()
    {

    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the bs
     */
    public java.util.List<B> getBs() {
        return bs;
    }

    /**
     * @param bs the bs to set
     */
    public void setBs(java.util.List<B> bs) {
        this.bs = bs;
    }
}

Class B:

@Entity
@Table(name="tblB")
@Audited
public class B implements Serializable {

    @Id
    private BPK bpk;

    public B()
    {

    }

    /**
     * @return the bpk
     */
    public BPK getBpk() {
        return bpk;
    }

    /**
     * @param bpk the bpk to set
     */
    public void setBpk(BPK bpk) {
        this.bpk = bpk;
    }

}

Class BPK:

@Embeddable
public class BPK implements Serializable {

    private String name;
    @ManyToOne(targetEntity=testaudit.A.class,
        cascade={CascadeType.ALL})
    @JoinColumn(name="strAName")
    private A a;

    public BPK()
    {
       
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the a
     */
    public A getA() {
        return a;
    }

    /**
     * @param a the a to set
     */
    public void setA(A a) {
        this.a = a;
    }
}

Exception:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: TestAuditPU] Unable to build EntityManagerFactory
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:900)
        at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
        at testaudit.Main.main(Main.java:23)
Caused by: org.hibernate.HibernateException: could not init listeners
        at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:205)
        at org.hibernate.cfg.Configuration.getInitializedEventListeners(Configuration.java:1396)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
        at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
        at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:891)
        ... 4 more
Caused by: org.hibernate.MappingException: Type not supported: org.hibernate.type.ManyToOneType
        at org.hibernate.envers.configuration.metadata.IdMetadataGenerator.addIdProperties(IdMetadataGenerator.java:75)
        at org.hibernate.envers.configuration.metadata.IdMetadataGenerator.addId(IdMetadataGenerator.java:120)
        at org.hibernate.envers.configuration.metadata.AuditMetadataGenerator.generateFirstPass(AuditMetadataGenerator.java:374)
        at org.hibernate.envers.configuration.EntitiesConfigurator.configure(EntitiesConfigurator.java:100)
        at org.hibernate.envers.configuration.AuditConfiguration.<init>(AuditConfiguration.java:86)
        at org.hibernate.envers.configuration.AuditConfiguration.getFor(AuditConfiguration.java:99)
        at org.hibernate.envers.event.AuditEventListener.initialize(AuditEventListener.java:334)
        at org.hibernate.event.EventListeners$1.processListener(EventListeners.java:198)
        at org.hibernate.event.EventListeners.processListeners(EventListeners.java:181)
        at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:194)
        ... 8 more
Java Result: 1

Thanks

Heinen Rino



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