3

我刚刚在我的数据库中创建了多对多关系,我的程序停止运行。这是我得到的错误:

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

我真的不知道为什么它一直给我显示“收集第二遍”消息以及为什么它无法构建 PU。谁能帮我吗?

4

1 回答 1

0

那是因为你把@OneToMany两边都放了。您需要在一侧(“一”侧)放置@OneToMany,而在另一侧(“多”侧)放置@ManyToOne

或者,如果两边确实有一个列表,您可能需要使用@ManyToMany注释。

于 2013-04-11T18:10:47.157 回答