2012-11-07 87 views
1

我有这个表:org.hibernate.MappingException:无法找到逻辑名称列:

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

(其它领域中,我只是告诉你,参与该问题的那些)

和这里的实体:

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; 

当我尝试启动我得到这个异常的服务器:

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 

编辑:我刚刚发现如果我从注释中删除“referencedColumn”属性,我会得到一个不同的异常:

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

我认为sicco_participante是一个实体,您没有列出 – DaveRlz

+0

W帽子是'sicco_participante'?该错误消息指示该对象,但我无法在代码中找到它。 – Johanna

+0

对不起,我将sicco_participante更名为参与者,使其更简单,并忘记将其重命名为异常消息...对不起...我也编辑了例外名称... sicco_participante与参与者相同... – diminuta

回答

1

如果我创建它的工作原理辅助PK类...

例如:

@Embeddable 
public class CitaPK implements Serializable{ 

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

然后在引文类:

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

    private static final long serialVersionUID = 1L; 
    @Id 
    private CitaPK citaPK; 

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#d0e2177

相关问题