hibernate 映射自身一对多双相关联,在model中,含有类对象,那在action中,怎样得到前台页面表单的值呢?

这是model:publicclassOrganization{privateintid;privateStringname;privateStringsn;privat... 这是model:
public class Organization {
private int id;
private String name;
private String sn;
private String description;
private Organization parent;
private Set<Organization> children;
。。。。。。。
}
在hibernate的映射关系:
<class name="com.oa.model.Organization" table="t_organization">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<property name="sn"/>
<property name="description"/>
<many-to-one name="parent" column="pid"></many-to-one>
<set name="children" lazy="extra" inverse="true">
<key column="pid"></key>
<one-to-many class="com.oa.model.Organization"/>
</set>
</class>

那我在action 中,怎样得到前提的值呢?因为model中用的是对象perent (children),数据库生成的字段是pid,而model中没有这个pid属性,是不是必须使用request来得到前台值??

望高手答疑解惑!!!!!!
展开
 我来答
盛衍无轩
2011-04-24 · TA获得超过364个赞
知道答主
回答量:55
采纳率:86%
帮助的人:21.2万
展开全部

PID是数据库生成的用于维护关联关系的外键列的列名,使用request如何从前台得到!从上面的配置看,设置inverse=“true”表明children表(为了后面好叙述,将该表的对象的类称为Children类)是从表,即由该端控制关联关系,parent表是主表(为了后面好叙述,将该表的对象的类称为Parent类),不控制关联关系。持久化该对象需要注意两点:

1、在保存数据时,应最先持久化主表即Parent对象(或该对象本身已经处于持久化状态)。因为我们希望程序持久化Children对象时,Hibernate可为children的外键属性分配值。也就是说在向children表插入记录时,该记录的外键列已制定了值——这表明它参照的主表记录已存在。

2、先设置Parent对象和Children对象的关联关系,再保存持久化Children对象。

所以根据上面配置,你可以这样保存对象:

Organization org1=new Organization();

org1.setName("aaaa");

org1.setSn("bbbbb");

org1.setDescription("ccccccc");

//持久化该对像

session.save(org1);

//创建一个瞬态Organization对象,令这个对象等于org1

Organization org2=org1;

//设置关联关系

org2.setParent(org1);

//再持久化org2对象

session.persist(org2); 

我用oracle10g测试了上面的代码,表结构为

追问
如果我在前台添加机构的时候,肯定会要求选择父机构,但是在后台取得数据的时候是用get()得到前台提交的数据:id ,name,sn ,description ,和父机构的id,但是在在Organization 类中是没有父机构id这个属性的,那这个id怎么得到,用request?
追答
父机构的ID就是表的ID,前台选择的父机构是从数据库表中查询出来输出到前台的。后台接收到前台数据将父ID解析出来,剩余的变量赋值给children对象。然后根据接收到的父ID从数据库中查询出parent对象,然后再设置关联关系(childern.setParent())。如果闲麻烦直接用SQL语句插入数据。
5izltxy7s
2011-04-25 · TA获得超过1043个赞
知道小有建树答主
回答量:1305
采纳率:50%
帮助的人:748万
展开全部
一般情况下 都是自身一对多双向关联 在表的内部建立父子关系 可以无限递归,是一个树形结构
比如像这样结构的:
代码 名称 父节点
01 中国
02 北京 01
03 朝阳区 02
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式