日期:2014-05-18  浏览次数:20759 次

关于Hibernate 单个表一对一自关联问题(点击查看具体描述)在线等
create table Users  
(
User_id varchar(32) primary key,
First_name varchar(20),
Middle_name varchar(20),
Last_name varchar(32),
Nick_name varchar(32),
Email varchar(32),
Password varchar(32),
logo varchar(100),
description varchar(1000)
); 

这是表结构
我的目的是 有2个角色,一个叫学生一个叫家长,他们之间的关系是一对一,但是要在一张表中反映.
我的想法是 添加学生时,把家长也set进去
具体java代码如下
User student = new User();
User parent = new Parent();
student.setName(".....");
parent.setName(".....");
student.setParent(parent);//学生把家长设置到自己的一地一关系中
parent.setStudent(student);//家长把学生设置到自己的一对一关联中
userDAO.save();
那么查询的时候可以只需要一个对象 然后lazy 来取得另外一个,我的目的是这样

然后配置是这样
  <one-to-one name = "student" class="com.wptech.school.domain.model.Users" cascade = "all" />
  <one-to-one name = "parent" class = "com.wptech.school.domain.model.Users" cascade = "all"/>
pojo代码是这样
private String userId;
private String firstName;
private String middleName;
private String lastName;
private String nickName;
private String email;
private String password;
private String logo;
private String description;
private Users parent;
private Users student;

set...get...

感觉这样配置错了 但是以前没搞过不知道怎么解决 所以希望有这样的需求的朋友给点思路 或者其他做法..

------解决方案--------------------
up
------解决方案--------------------
帮顶 。。
------解决方案--------------------
个人感觉这个两个配置中有一个配lazy="false"就可以了
<one-to-one name = "student" class="com.wptech.school.domain.model.Users" cascade = "all" />
<one-to-one name = "parent" class = "com.wptech.school.domain.model.Users" cascade = "all"/>
------解决方案--------------------
来看看。。。。不记得了。。。。
------解决方案--------------------
首先学生和家长一对一设计就有问题,都是单身家庭啊

对于one-to-one 做了主外键约束是不能lazy.
我假设你的Users是主表
要想lazy,写配置文件的时候必须满足三个条件,lazy=ture,constrained=true,fetch=select
------解决方案--------------------
数据库这样:
不分什么家长和学生,都是User
定义一个字段,该字段表示该条记录的父节点的id。