2013-04-11 54 views
3

我剛在數據庫中創建了多對多的關係,程序停止運行。這是錯誤我得到:創建多對多關係後出現「Unable to build EntityManagerFactory」

759 [JavaFX Application Thread] DEBUG org.hibernate.cfg.Configuration - Processing fk mappings (*ToOne and JoinedSubclass) 
767 [JavaFX Application Thread] DEBUG org.hibernate.cfg.Configuration - Processing extends queue 
767 [JavaFX Application Thread] DEBUG org.hibernate.cfg.Configuration - Processing extends queue 
767 [JavaFX Application Thread] DEBUG org.hibernate.cfg.Configuration - Processing collection mappings 
776 [JavaFX Application Thread] DEBUG org.hibernate.cfg.CollectionSecondPass - Second pass for collection: gear7.partyrock.model.Atividade.convidados 
777 [JavaFX Application Thread] ERROR gear7.partyrock.utils.JPAUtils - Não conseguiu carregar a EntityManagerFactory: [PersistenceUnit: PartyRockPU] Unable to build EntityManagerFactory 

這是我的第一個實體:

@Entity 
@Table(name = "convidados") 
public class Convidado implements AbstractEntity, Serializable { 
... 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.convidado", cascade = CascadeType.ALL) 
    private List<Atividade> atividades; 

這是我的第二個實體:

@Entity 
@Table(name = "atividades") 
public class Atividade implements AbstractEntity, Serializable { 
... 
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.atividade", cascade = CascadeType.ALL) 
    private List<Convidado> convidados; 

這是我的關係表:

@Entity 
@AssociationOverrides({ 
    @AssociationOverride(name ="pk.convidado", joinColumns = @JoinColumn(name ="convidado_id")), 
    @AssociationOverride(name ="pk.atividade", joinColumns = @JoinColumn(name ="atividade_id")) 
}) 
public class ConvidadoAtividade implements Serializable { 
    private ConvidadoAtividadePk pk = new ConvidadoAtividadePk(); 
    private Date dataCheckIn; 

    @EmbeddedId 
    public ConvidadoAtividadePk getPk() { 
     return pk; 
    } 

    private void setPk(ConvidadoAtividadePk pk) { 
     this.pk = pk; 
    } 

    @Transient 
    public Atividade getAtividade() { 
     return getPk().getAtividade(); 
    } 

    public void setAtividade(Atividade atv) { 
     getPk().setAtividade(atv); 
    } 

    @Transient 
    public Convidado getConvidado() { 
     return getPk().getConvidado(); 
    } 

    public void setConvidado(Convidado conv) { 
     getPk().setConvidado(conv); 
    } 

    @Temporal(TemporalType.DATE) 
    @Column(name = "dataCheckIn", nullable = false) 
    public Date getDataCheckIn() { 
     return this.dataCheckIn; 
    } 

    public void setDataCheckIn(Date dataCheckIn) { 
     this.dataCheckIn = dataCheckIn; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) 
      return true; 

     if (o == null || getClass() != o.getClass()) 
      return false; 

     ConvidadoAtividade that = (ConvidadoAtividade) o; 

     if (getPk() != null ? !getPk().equals(that.getPk()) : that.getPk() != null) 
      return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     return (getPk() != null ? getPk().hashCode() : 0); 
    } 
} 

我真的不知道爲什麼它保持g讓我知道「第二次收集」消息正在顯示,以及它爲什麼無法構建PU。誰能幫我嗎?

+0

你可以發佈完整的堆棧跟蹤異常嗎? – fmodos 2013-04-11 17:45:09

回答

0

這是因爲你把@OneToMany放在兩邊。你需要在一邊(「一邊」)放@OneToMany,另一邊(「多邊」)放@ManyToOne。或者,如果兩側確實存在列表,則可能需要使用@ManyToMany註釋。