@Entity
public class Husband { private int id;

private String name; private Wife wife;

@Id @GeneratedValue
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @OneToOne
public Wife getWife() {
return wife;
} public void setWife(Wife wife) {
this.wife = wife;
}
}@Entity
public class Wife { private int id;

private String name;

@Id @GeneratedValue
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}

}
设置Annotation的外键单向OneToOne,然后我让Hibernate给我去生成建表语句。public void testSchemaExport(){
new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
}
结果给我创建的表是:create table Husband (
        id integer not null auto_increment,
        name varchar(255),
        wife_id integer,
        primary key (id)
    )
create table Wife (
        id integer not null auto_increment,
        name varchar(255),
        primary key (id)
    )
问题是,Husband表的外键wife_id没有加unique约束?这根本不是one-to-one关系嘛。
然后我用Annotation继续将Wife添加一个Husband熟悉,搞成双向One-to-one。
接着我去创建了两个Husband对象,都去set同一个Wife,Hibernate居然不报错。等到我session.get出那个Wife对象的时候给我报错了,说不止有一个匹配的Husband。但是用xml配置单向外键onetoone,<many-to-one name="student" column="student_id" unique="true"></many-to-one>
Hibernate在创建表的时候它会在wife_id后面加unique约束。Hibernate这不是骗人的OnetoOne么?以前还真没注意这个问题。
请高手来解释一下。
annotation中有什么解决方案么?等ing...