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
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:
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist, wenn ich Hilfs-PK Klassen funktioniert es...
Beispiel:
Und dann in die Cita-Klasse:
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#d0e2177
InformationsquelleAutor diminuta