hibernate生成的建表语句是这样的:
  create table husband (
        id integer not null auto_increment,
        name varchar(255),
        wifeId integer,
        primary key (id)
    )
20:48:57,234 DEBUG SchemaExport:377 - 
    create table wife (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
20:48:57,250 DEBUG SchemaExport:377 - 
    alter table husband 
        add index FK4BB1A83BC07991DD (wifeId), 
        add constraint FK4BB1A83BC07991DD 
        foreign key (wifeId) 
        references wife (id)我想问一下,从这怎么看出是一对一关系呢,我怎么感觉是多对一关系呢?如果是一对一,在husband表中的wifeId后面应该有个unique才对啊!

解决方案 »

  1.   

    这是用annotation的@OneToOne注解做的,我试过用xml文件配置的方式,就是用many-to-one,其中加个属性unique=“true”,生成的建表语句中,husband的wifeId属性后面就有unique约束,这怎么没有呢?
      

  2.   

    刚才做了个试验,在数据库中插入两个husband使他们公用一个wife,即他们的wifeId相同,竟然可以插入!这不就说明这根本不是一对一的关系么,那么要怎么样才能让他们变成一对一的关系(使用annotation)?
      

  3.   

    我也遇见这个问题了,在@JoinColumn(name="wifeid",unique=true)多加了个unique=true就行了,@OneToOne(optional=false)加入optional=false也行。
      

  4.   

    如果你直接对数据库操作,按照你给的SQL应该可以成功,我猜JPA 可能自己再程序中检查了, 你如果NEW 两个Husband 对象,然后引用同一个WIFE 然后在 PERSIST 可能报错。  
    以上都是猜测, 记得很久以前听人说, 程序如果最后还需要数据库检查约束报异常就很失败了。 所以我想JPA 虽然自己在SQL 默认不加, 但应该有检测机制吧。 不然就是JPA IMPLEMENTATION 的BUG 了