关于Hibernate一对一的关联有关问题
关于Hibernate一对一的关联问题
hibernate的一对一关联,要实现的需求是有两张表.User和Employee,其中他们是一一对应的关系,其中User表的结构为
ID 主键,业务无关
USERID 用户编号
USERNAME 用户类型
EMPLOYEEID 关联Employee表中的员工编号EMPID
Employee的结构是
ID 主键,业务无关
EMPID 员工编号
EMPNAME 员工姓名
我的做法是
配置文件:
user.hbm.xml
<many-to-one name="employee" class="Employee" cascade="none"
outer-join="auto" column="EMPLOYEEID" property-ref="empid" unique="true"/>
employee.hbm.xml
<one-to-one name="user" class="User" cascade="all" property-ref="employee"/>
这样关联,根据employee.getUser()取不到值,在保存的时候,根据user.setEmployee()保存成功的,但现在就是取不到值,会是甚么原因呢?
真是自找麻烦,我看你重新设计表吧:
要么合成两张表为一张,要么请通过主键-外键关联,不要使用属性关联-外键关联
使用property-ref有什么好?那是针对遗留系统的。
试过了,没有column属性
hibernate的一对一关联,要实现的需求是有两张表.User和Employee,其中他们是一一对应的关系,其中User表的结构为
ID 主键,业务无关
USERID 用户编号
USERNAME 用户类型
EMPLOYEEID 关联Employee表中的员工编号EMPID
Employee的结构是
ID 主键,业务无关
EMPID 员工编号
EMPNAME 员工姓名
我的做法是
配置文件:
user.hbm.xml
<many-to-one name="employee" class="Employee" cascade="none"
outer-join="auto" column="EMPLOYEEID" property-ref="empid" unique="true"/>
employee.hbm.xml
<one-to-one name="user" class="User" cascade="all" property-ref="employee"/>
这样关联,根据employee.getUser()取不到值,在保存的时候,根据user.setEmployee()保存成功的,但现在就是取不到值,会是甚么原因呢?
1 楼
Qieqie
2007-05-09
真是自找麻烦,我看你重新设计表吧:
要么合成两张表为一张,要么请通过主键-外键关联,不要使用属性关联-外键关联
使用property-ref有什么好?那是针对遗留系统的。
2 楼
stonecai
2007-05-09
表不是我设计的,上面设计的。改不了~
至于那两张表是我虚构的,真实的属性很多,但他们的关系就是所表达的那两张表的关系
属性关联,不是主键-外键关联。
全部表的主键都是与业务无关的,不过多对多,一对多等都没问题,就是一对一出现能存不能读的问题。
如果实在没办法,干脆用一对多来处理算了~~呵呵
至于那两张表是我虚构的,真实的属性很多,但他们的关系就是所表达的那两张表的关系
属性关联,不是主键-外键关联。
全部表的主键都是与业务无关的,不过多对多,一对多等都没问题,就是一对一出现能存不能读的问题。
如果实在没办法,干脆用一对多来处理算了~~呵呵
3 楼
Qieqie
2007-05-09
你试一下这个配置,看如何
user.hbm.xml
<one-to-one name="employee" class="Employee" column="EMPLOYEEID" property-ref="empid" />
employee.hbm.xml
<many-to-one name="user" class="User" unique="true" cascade="all" property-ref="employee" />
---
以上配置错误,别试了
user.hbm.xml
<one-to-one name="employee" class="Employee" column="EMPLOYEEID" property-ref="empid" />
employee.hbm.xml
<many-to-one name="user" class="User" unique="true" cascade="all" property-ref="employee" />
---
以上配置错误,别试了
4 楼
stonecai
2007-05-09
<one-to-one>是没有column的吧?记得没有的
5 楼
stonecai
2007-05-09
Qieqie 写道
你试一下这个配置,看如何
user.hbm.xml
<one-to-one name="employee" class="Employee" column="EMPLOYEEID" property-ref="empid" />
employee.hbm.xml
<many-to-one name="user" class="User" unique="true" cascade="all" property-ref="employee" />
user.hbm.xml
<one-to-one name="employee" class="Employee" column="EMPLOYEEID" property-ref="empid" />
employee.hbm.xml
<many-to-one name="user" class="User" unique="true" cascade="all" property-ref="employee" />
试过了,没有column属性
6 楼
onemoretry
2007-05-09
user.hbm.xml,试试去掉两个属性
<many-to-one name="employee" class="Employee" cascade="none"
outer-join="auto" column="EMPLOYEEID"/>
<many-to-one name="employee" class="Employee" cascade="none"
outer-join="auto" column="EMPLOYEEID"/>