【问题标题】:How to add two primary keys in a table?如何在一个表中添加两个主键?
【发布时间】:2019-07-16 05:41:50
【问题描述】:

SalutationMst.java

@Entity
@Table(name = "SalutationMst")
@EntityListeners(AuditingEntityListener.class)

public class SalutationMst  {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", nullable = true )///////////////id
    private Long id;
    //@Id
     @Column(name = "code", nullable = false, length=15)///////////////code
    private String code;
     @Column(name = "name", nullable = false, length=15)////////////////name
    private String name;
    //private long genderid;
     @Column(name = "active", nullable = false)////////////////active
    private Boolean active;

    //@ManyToOne(targetEntity=GenderMst.class,cascade=CascadeType.ALL)
    @ManyToOne
    //@JoinColumn(name="id", nullable=false)
    private GenderMst genderMst;
    //getters snd setters
}

这里的String code也应该是pk。字符串 id 是自动生成的,但代码不是。通过来 exp 我需要指定代码是重复的,因为我需要代码作为 pk。

GenderMst.java

@Entity
@Table(name = "GenderMst")
public class GenderMst {

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


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(name = "code", nullable = true,length=15)
    private String code;
    @Column(name = "name", nullable = true,length=15)
    private String name;
    //getters and setters
}

【问题讨论】:

  • 你没有。你只能有一个主键。不过,您可以有一个复合主键。谷歌就知道了。
  • 既然我已经唯一标识了一个称呼,为什么还要让代码成为 PK 的一部分?如果您希望代码是唯一的,请在代码上添加唯一约束。无需将其作为 PK 的一部分即可。
  • 我忘记了唯一标识符。谢谢

标签: java hibernate hibernate-mapping nhibernate-mapping


【解决方案1】:

实现这一点的一种方法是您可以为Composite Primary Key 创建一个单独的类并将其用作EmbeddedId,例如:

@Embeddable
public class SalutationMstId  {
   private Long id;
   private String code;

   //constructors

   //getter setters
}

并像这样使用它:

@Entity
@Table(name = "SalutationMst")
@EntityListeners(AuditingEntityListener.class)

public class SalutationMst  {
     @EmbeddedId
     private SalutationMstId id;
     @Column(name = "name", nullable = false, length=15)////////////////name
    private String name;
    //private long genderid;
     @Column(name = "active", nullable = false)////////////////active
    private Boolean active;

    //@ManyToOne(targetEntity=GenderMst.class,cascade=CascadeType.ALL)
    @ManyToOne
    //@JoinColumn(name="id", nullable=false)
    private GenderMst genderMst;
    //getters snd setters
}

阅读更多this link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多