org.hibernate.MappingException: Unable to find column with logical name:

Habe ich diese TABELLEN:

1.- PARTICIPANTE

CREATE TABLE participante ( 
    id_participa    SMALLINT NOT NULL,
    nasi            INTEGER NOT NULL,
    PRIMARY KEY(id_participa,nasi),
    FOREIGN KEY(nasi) REFERENCES persona(nasi)
)

2.- PERSONA

CREATE TABLE persona ( 
    nasi        INTEGER NOT NULL,
    PRIMARY KEY(nasi)
)

3.- CITA

CREATE TABLE cita ( 
    id_participa    SMALLINT NOT NULL,
    nasi            INTEGER NOT NULL,
    idcita          INTEGER NOT NULL,
    PRIMARY KEY(id_participa,idcita,nasi),
    FOREIGN KEY(id_participa, nasi) REFERENCES participante(id_participa, nasi)
)

4.- FORMULARIO

CREATE TABLE formulario ( 
        id_participa        SMALLINT NOT NULL,
        nasi                INTEGER NOT NULL,
        idcita              INTEGER NOT NULL,
        PRIMARY KEY(id_participa,idcita,nasi),
        FOREIGN KEY(id_participa, nasi, idcita) REFERENCES cita(id_participa, nasi, idcita)
    )

(unter anderen Feldern, die ich gerade Ihnen zeigen, diejenigen, die beteiligt sind, in das problem)

und hier sind die ENTITÄTEN:

1.- PARTICIPANTE

@Entity
@Table(name = "participante")
public class Participante implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "id_participa")
    private Integer idParticipante;
    @Id
    @OneToOne
    @JoinColumn(name = "nasi")
    private Persona persona;

2.- PERSONA

@Entity
@Table(name = "persona")
public class Persona implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "nasi")
    private Integer nasi;

3.- CITA

@Entity
@Table(name = "cita")
public class Cita implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "idcita")
    private Integer idCita;
    @Id
    @ManyToOne
    @JoinColumns({
            @JoinColumn(name = "id_participa", referencedColumnName = "id_participa"),
            @JoinColumn(name = "nasi", referencedColumnName = "nasi") })
    private Participante participante;

4.- FORMULARIO

@Entity
@Table(name = "formulario")
public class Formulario implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @OneToOne
    @JoinColumns({
            @JoinColumn(name = "id_participa", referencedColumnName = "id_participa"),
            @JoinColumn(name = "nasi", referencedColumnName = "nasi"),
            @JoinColumn(name = "idcita", referencedColumnName = "idcita") })
    private Cita cita;

Und wenn ich versuche den server zu starten ich habe dieses Ausnahme:

Caused by: org.hibernate.MappingException: Unable to find column with logical name: nasi in participante
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:575)
    at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:126)
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116)
    at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1514)
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1437)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:242)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:372)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:357)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 73 more

BEARBEITEN: ich habe gerade herausgefunden, dass wenn ich mit dem entfernen des "referencedColumn" - Attribut von den Anmerkungen, die ich eine andere Ausnahme:

Caused by: org.hibernate.AnnotationException: A Foreign key refering es.myapp.modelo.datos.dominio.participante.Participante from es.myapp.modelo.datos.dominio.cita.Cita has the wrong number of column. should be 1
    at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:432)
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117)
    at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1514)
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1437)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:242)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:372)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:357)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 73 more
Ich nehme an, sicco_participante ist eine Entität, die Sie noch nicht aufgeführt
Was ist sicco_participante? Die Fehlermeldung zeigt an, dass das Objekt, aber ich kann es nicht finden in Ihrem code.
Sorry, ich umbenannt sicco_participante als participante um es einfacher zu machen, und vergaß, um es umzubenennen, die auf die exception-Meldung... sorry... ich bearbeitet die Ausnahme Namen zu... sicco_participante ist das gleiche wie participante...
Irgendwelche Ideen dann? :/
Kleiner Kommentar nicht wirklich im Zusammenhang mit der Frage: Wenn Sie ein ORM, versuchen, so viel wie Sie können auf eine einfache, numerische Tasten für Ihre Entitäten, sondern als zusammengesetzte Schlüssel. Dadurch vereinfachen Sie sich die Zuordnungen erheblich und ist weniger fehleranfällig. Aus der hibernate Dokumentation: You can also declare the identifier as a composite identifier. This allows access to legacy data with composite keys. Its use is strongly discouraged for anything else. - docs.jboss.org/hibernate/orm/4.1/manual/en-US/html/ch05.html

InformationsquelleAutor diminuta | 2012-11-07

Schreibe einen Kommentar