RT,我用hibernate  annotation  映射 one to one 外键关系,
但是hibernate 自动生成的mysql table 并不是one to one 的 关系。
只不过是在第二个表中插入了外键(第一个表的逐渐),但是他们之间并不是真正意义上的一对一,
怎么样才能生成一对一呢?

解决方案 »

  1.   

    那样的话就不是插入主键了,而是一个Set集合,你说的那是一对多
      

  2.   

    你没有理解我的意思,我是说我在pojo里使用了one-to-one annotation,
    但是生成的2张数据库表并不是1对1的,我完全可以在第二张表里插入
    id      foreign id
    1         1
    2         1
    那就是说one-to-one  annotation 是没用的。
      

  3.   


    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