【问题标题】:How to map a @ManyToOne association using a non-Primary Key in Hibernate?如何在 Hibernate 中使用非主键映射 @ManyToOne 关联?
【发布时间】:2020-07-01 09:07:53
【问题描述】:

如何在 Hibernate 中使用非主键映射 @ManyToOne 关联? 我可以使用@NaturalId 注释,但仍然有错误:

A Foreign key refering POJO.Question from POJO.Answer has the wrong number of column. should be 4

问题类(多主键):

    @Entity
    @Table(name = "[dbo].[Question]")
    public class Question implements Serializable {

        @Column(name = "[Id]", unique = true, nullable = false) 
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @NaturalId
        private Integer id;

        @EmbeddedId
        private QuestionEmbeddable questionEmbeddable;
}

主键

    public class QuestionEmbeddable implements Serializable{

        @Column(name = "[Development Template Id]")
        private int templateId;

        //Sekcja w templejcie
        @Column(name = "[Section]")
        private Integer section;

        //Numer w sekcji
        @Column(name = "[Number]")
        private Integer number;

        //Wersja 
        @Column(name = "[Version]")
        private Integer version;
}

答题类:

    @Entity
    @Table(name = "[dbo].[Answer]")
    public class Answer implements Serializable {

        @Id
        @Column(name = "[Id]", unique = true, nullable = false) 
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;

        @JoinColumn(name = "[Question Id]")
        @ManyToOne(fetch=FetchType.LAZY)
        private Question question;

看起来关联仍然是@EmbeddedId,而不是@Naturalid。不知道为什么?

【问题讨论】:

标签: hibernate associations many-to-one naturalid


【解决方案1】:

这是答案,必须使用referencedColumnName

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(
        name = "[Question Id]", referencedColumnName = "[Id]"
    )
    private Question question;

【讨论】:

    猜你喜欢
    • 2011-11-15
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多