-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Audited class with @EmbeddedId and @ManyToOne relationship
PostPosted: Sun Jul 11, 2010 10:25 am 
Newbie

Joined: Fri Nov 28, 2008 5:11 pm
Posts: 2
Hi,

i have a problem when I try to make a class @Audited when this class have an @EmbeddedId (only when the Embeddable class have ManyToOne relationship).

Code:

persistence.xml:
Code:
<?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:
Code:
/*
* 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:
Code:
@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:
Code:
@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;
    }
}



Main:
Code:
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        EntityManagerFactory hemf =  Persistence.createEntityManagerFactory("TestAuditPU");
        SessionFactory sessionFactory = getSessionFactory(hemf);
        //sessionFactory.openSession();
    }

    private static SessionFactory getSessionFactory(EntityManagerFactory hemf) {
           return ((org.hibernate.ejb.HibernateEntityManagerFactory)hemf).getSessionFactory();
    }

}


Exception:
Code:
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


It's possible to make a class with a EmbeddedId (with ManyToOne relationship) a audited class?

Thanks

Heinen Rino


Top
 Profile  
 
 Post subject: Re: Audited class with @EmbeddedId and @ManyToOne relationship
PostPosted: Mon Feb 07, 2011 7:45 am 
Newbie

Joined: Mon Feb 07, 2011 7:43 am
Posts: 6
Good Morning

You could find a solution to this problem.
I'm passing by, the same difficulty.

Thanks


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.