Hibernate用Unique约束列做外键,如何配置?
我有一个需求,需要用一个unique约束的键作为外键,而不是主键作为外键,应该如何配置?
大只需求描述如下:
两张表,一张是门禁卡表(card_info), 另一张刷卡记录表(card_data)
在门禁卡表中有自己的主键(card_id),同时还有一个门禁卡编号(card_code),card_code上有unique约束
刷机记录表中保存的也是“门禁卡编号”,外键关联至 card_info表的card_code字段
我当前配置如下:
@Entity@Table(name = "card_info")public class CardInfo{ @GenericGenerator(name = "uuid", strategy = "com.hibernate.my.UUIDGenerator") @GeneratedValue(generator = "uuid") @Column(name = "card_id") @Id private String cardId; @Column(name = "card_user_name") private String cardUserName; @Column(name = "card_code") //这个键是唯一约束键,意思是“卡片编号” private String cardCode;//setter getter省略}
@Entity@Table(name = "card_data")public class CardData{ @GenericGenerator(name = "uuid", strategy = "com.hibernate.my.UUIDGenerator") @GeneratedValue(generator = "uuid") @Column(name = "card_data_id") @Id private String cardDataId; @Column(name = "create_time") private Date createTime; //刷卡时间 @Column(name = "card_code") //这个键是唯一约束键,意思是“卡片编号” private String cardCode; @ManyToOne(fetch = FetchType.LAZY) @Cascade(value = { org.hibernate.annotations.CascadeType.SAVE_UPDATE }) @JoinColumn(name = "card_code", insertable = false, updatable = false, unique = true) private CardInfo cardInfo;//setter getter省略
select * from card_data data inner join card_info info on data.card_code=info.card_id
select * from card_data data inner join card_info info on data.card_code=info.card_code --这里是两个表的card_code进行匹配