Hibernate中如何映射one-to-one关系。
1、 数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束(外健关联)。或者是两个表共享一个主健,表现为子表中的pk同时引用了父表的pk作外健而存在(主健关联,子表中的pk和fk为一个字段)。
2、 javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。
3、 在hibernate中:
A、主健映射:都是one-to-one要用foreign生成策略。
以汽车car和发动机Engine(一对一关系)为例:
a、主表Car.hbm.xml的写法
注:cascade="all" 表示增删改查Car对象时都会级联增加、删除和修改Engine对象。
级联一定是在主对象的映射文件中
b、附表Engine.hbm.xml的写法
car
注:constrained="true"表示Engine应用了Car的主健作为外健。
B、外健映射:主表中用one-to-one,通过property -ref many-to-one
a、主表Car.hbm.xml的写法
注:name="engine" property-ref="car"表示engine表引用了car表的主健作为他的外健。
cascade="save-update"表示增改Car对象时都会级联增加和修改Engine对象。
b、附表Engine.hbm.xml的写法
注:unique="ture" column="carid"表示为engine表中的外健carid加上唯一约束,使之一对多关系强制转化为一对一关系。
给你一个例子吧: 多个user对应一个zlass
set set=new hashset();
zlass zlas=new zlass();
user user=new user();
user.setpassword("ddd");
user.setusername("hello");
set.add(user);
zlas.setclassname("3 grade");
zlas.setusers(set);
//添加一个新的set,set中是user对象。 这就话很重要,就是使它们两个建立关系,这样在user表中的id就不为空了
userdao.save(zlas);
其中的zlass.hbm.xml文件:
其中的配置文件你要是写inverse="true"也会导致user表中id为空,默认是false,估计你可能就是这两点的问题
希望对你有帮助!