RT,我用hibernate annotation 映射 one to one 外键关系,
但是hibernate 自动生成的mysql table 并不是one to one 的 关系。
只不过是在第二个表中插入了外键(第一个表的逐渐),但是他们之间并不是真正意义上的一对一,
怎么样才能生成一对一呢?
但是hibernate 自动生成的mysql table 并不是one to one 的 关系。
只不过是在第二个表中插入了外键(第一个表的逐渐),但是他们之间并不是真正意义上的一对一,
怎么样才能生成一对一呢?
但是生成的2张数据库表并不是1对1的,我完全可以在第二张表里插入
id foreign id
1 1
2 1
那就是说one-to-one annotation 是没用的。
package eg;import javax.persistence.*;@Entity
@Table(name = "t_passport")
public class Passport implements java.io.Serializable { private static final long serialVersionUID = -7258810132616826122L; @Id
@Column(name = "_no", length = 20)
private String no; @Column(name = "_name", length = 30)
private String name; @OneToOne(mappedBy = "passport")
private Citizen citizen; // 默认构造器,getter,setter
}
package eg;import javax.persistence.*;
import enums.Gender;@Entity
@Table(name = "t_citizen")
public class Citizen implements java.io.Serializable { private static final long serialVersionUID = 8707788315143136972L; @Id
@Column(name = "_id", length = 11)
private Integer id; @Column(name = "_name", length = 30)
private String name; @Enumerated(EnumType.STRING)
@Column(name = "_sex", length = 6)
private Gender gender; @OneToOne
@JoinColumn(name = "_passport_no", nullable = false, unique = true)
private Passport passport; // 默认构造器,getter,setter
}
你是用外键莫及的一对一吧。 @JoinColumn 一定要加 unique=true