Hibernate: Problema de persistencia com banco de dados

0 respostas
sakana

I have a Database that i need to persist and that i can’t change his structure.

With reverse engineering i created the persistence model, but now i’m with problems:

Class EventActions:

import javax.persistence.*;
import java.util.Collection;

@Entity
@Table(catalog = "yogurt", schema = "dbx", name = "EventActions")
@IdClass(EventactionsPK.class)
public class Eventactions {
    private int operationintervalid;
    private short eventactionid;
    private short eventtypeid;
    private String eventactionname;
    private Operationinterval operationintervalsByOperationintervalid;

    @ManyToOne
    @JoinColumn(name = "operationIntervalId", referencedColumnName = "operationIntervalId", nullable = false)
    public Operationinterval getOperationintervalsByOperationintervalid() {
        return operationintervalsByOperationintervalid;
    }

    public void setOperationintervalsByOperationintervalid(Operationinterval operationintervalsByOperationintervalid) {
        this.operationintervalsByOperationintervalid = operationintervalsByOperationintervalid;
    }

    @Basic
    @Column(name = "eventActionName", nullable = false, length = 50)
    public String getEventactionname() {
        return eventactionname;
    }

    public void setEventactionname(String eventactionname) {
        this.eventactionname = eventactionname;
    }

    @Basic
    @Column(name = "eventTypeId", nullable = false, length = 5)
    public short getEventtypeid() {
        return eventtypeid;
    }

    public void setEventtypeid(short eventtypeid) {
        this.eventtypeid = eventtypeid;
    }

    @Id
    @Column(name = "eventActionId", nullable = false, length = 5)
    public short getEventactionid() {
        return eventactionid;
    }

    public void setEventactionid(short eventactionid) {
        this.eventactionid = eventactionid;
    }

    @Id
    @Column(name = "operationIntervalId", nullable = false, length = 10)
    public int getOperationintervalid() {
        return operationintervalid;
    }

    public void setOperationintervalid(int operationintervalid) {
        this.operationintervalid = operationintervalid;
    }
}

The Pk Class:

public class EventactionsPK implements Serializable {
    private short eventactionid;
    private int operationintervalid;

    public int getOperationintervalid() {
        return operationintervalid;
    }

    public void setOperationintervalid(int operationintervalid) {
        this.operationintervalid = operationintervalid;
    }

    public short getEventactionid() {
        return eventactionid;
    }

    public void setEventactionid(short eventactionid) {
        this.eventactionid = eventactionid;
    }

    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        EventactionsPK that = (EventactionsPK) o;

        if (eventactionid != that.eventactionid) return false;
        if (operationintervalid != that.operationintervalid) return false;

        return true;
    }

    public int hashCode() {
        int result;
        result = (int) eventactionid;
        result = 31 * result + operationintervalid;
        return result;
    }
}

The OperationInterval class:

@Entity
@Table(catalog = "yogurt", schema = "dbx", name = "OperationInterval")
public class Operationinterval {
    private int operationintervalid;
    private Timestamp startdate;
    private Timestamp enddate;
    private boolean readytodebrief;
    private int dsnid;
    private Collection<Eventactions> eventactionsByOperationintervalid;

    @OneToMany(mappedBy = "operationintervalsByOperationintervalid")
    public Collection<Eventactions> getEventactionsByOperationintervalid() {
        return eventactionsByOperationintervalid;
    }

    public void setEventactionsByOperationintervalid(Collection<Eventactions> eventactionsByOperationintervalid) {
        this.eventactionsByOperationintervalid = eventactionsByOperationintervalid;
    }


    @Basic
    @Column(name = "dsnId", nullable = false, length = 10)
    public int getDsnid() {
        return dsnid;
    }

    public void setDsnid(int dsnid) {
        this.dsnid = dsnid;
    }

    @Basic
    @Column(name = "readytoDebrief", nullable = false, length = 1)
    public boolean isReadytodebrief() {
        return readytodebrief;
    }

    public void setReadytodebrief(boolean readytodebrief) {
        this.readytodebrief = readytodebrief;
    }

    @Basic
    @Column(name = "endDate", nullable = false, length = 23, precision = 3)
    public Timestamp getEnddate() {
        return enddate;
    }

    public void setEnddate(Timestamp enddate) {
        this.enddate = enddate;
    }

    @Basic
    @Column(name = "startDate", nullable = false, length = 23, precision = 3)
    public Timestamp getStartdate() {
        return startdate;
    }

    public void setStartdate(Timestamp startdate) {
        this.startdate = startdate;
    }

    @Id
    @Column(name = "operationIntervalId", nullable = false, length = 10)
    public int getOperationintervalid() {
        return operationintervalid;
    }

    public void setOperationintervalid(int operationintervalid) {
        this.operationintervalid = operationintervalid;
    }
}

When i validate the model, it gives the error:

org.hibernate.AnnotationException: Column name operationintervalid of Eventactions not found in JoinColumns.referencedColumnName

Caused by: org.hibernate.AnnotationException: Column name operationintervalid of com.criticalsoftware.chums.data.entity.hums.HumsBumeventact

ions not found in JoinColumns.referencedColumnName

at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:319)

at org.hibernate.cfg.FkSecondPass.doSecondPass(FkSecondPass.java:64)

at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:474)

at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:295)

at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)

at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1269)

at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:150)

at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:888)

at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:416)

at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:126)

at org.ow2.easybeans.persistence.JPersistenceContext.init(JPersistenceContext.java:72)

at org.ow2.easybeans.persistence.JPersistenceContext.(JPersistenceContext.java:65)

at org.ow2.easybeans.persistence.PersistenceUnitManager.addExtraPersistenceUnitInfos(PersistenceUnitManager.java:88)

at org.ow2.easybeans.persistence.PersistenceUnitManager.(PersistenceUnitManager.java:64)

at org.ow2.easybeans.persistence.xml.PersistenceXmlFileAnalyzer.analyzePersistenceXmlFile(PersistenceXmlFileAnalyzer.java:143)

at org.ow2.easybeans.container.JContainer3.start(JContainer3.java:271)

at org.ow2.easybeans.osgi.ejbjar.Activator.startContainer(Activator.java:129)

at org.ow2.easybeans.osgi.ejbjar.Activator.start(Activator.java:91)

at org.eclipse.osgi.framework.internal.core.BundleContextImpl$2.run(BundleContextImpl.java:999)

at java.security.AccessController.doPrivileged(Native Method)

at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:993)

… 14 more

Nested Exception:

So… I commented the joincolumn anotation… and the result is:

org.hibernate.HibernateException: Missing column: operationintervalsByOperationintervalid_operationIntervalId in yogurt.dbx.EventActions

How can i solve this problem ? I can’t change the database.

Criado 13 de outubro de 2007
Respostas 0
Participantes 1