使用主要复合键中的一列来休眠多对一映射

时间:2017-07-13 09:06:56

标签: java mysql hibernate

我现在正在尝试使用hibernate从mysql数据库中检索数据。但是,我遇到了org.hibernate.AnnotationException,它提醒我不能使用单个属性。我的代码如下,请看一下。

@Entity
@Table(name = "master")
public class Master implements Serializable {
    @EmbeddedId
    private MasterPK id;

    @Column
    private String description;

    @Column
    private String username;

    @Column
    private String emailaddress;

    ....

    @OneToMany(mappedBy = "master")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Child> childs;

    ....
    // Getter and setter
}


@Entity
@Table(name = "child")
public class Child implements Serializable {

    ....

    @Column
    private String code;

    @Column
    private String isGolden;

    @Column
    private Date startServiceDate;

    @Column
    private Date endServiceDate;

    @ManyToOne
    @JoinColumn(name="id_a", referencedColumnName="id_a")
    private Master master;

    ....
    // Getter and setter

}


@Embeddable
public class MasterPK implements Serializable {

    @Column(name="id_a")
    private String idA;

    @Column(name="id_b")
    private String idB;

    ...  
    //Classes generated by JPA Tools e.g. getter, setter, comparator
}

我尝试使用master.id_a和child.id_a映射主表和子表,而id_a和id_b是主表的主键。因此,hibernate引发了异常,我无法启动我的应用程序。但是我仍然想要通过id_a映射两个表,因为子表没有id_b。并且设计是主表中的每一行可以映射到多个子表。我可以就这种情况提出一些建议吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

在我看来,你“交换”了实体,即你定义的复合pk似乎实际上是典型子表的主键。 你可以发布实际表的架构吗?这可能会有所帮助