hibernate 树状自关联 *.hbm.xml 配置
来源:互联网 发布:域名如何别名解析 编辑:程序博客网 时间:2024/06/05 05:50
一直没有做过树状自关联的需求,以为很简单,但是,实际做的时候,有点懵了,他有他的特殊的地方。跟其他的不一样。
问题:
1.自身跟自身关联怎么配置
2.数据查询,怎么查出来是想要的。
3.暂且忘了这个问题了。不过,还是应该有这个疑惑。
没想明白,上网去看看他们都是怎么配置的。但是,基本上都是注解配置。而我用的是xml。看他们的不怎么理解其他的意思。总算弄清楚了,自己配置出现了内存溢出的问题。特别的来记一下。
网上的都是有特定需求很严谨的控制的,我在这里只是做一个测试。
这个里边的两个level与leaf其实是无关紧要的。
自关联,其实是树状数据,有父节点,有子节点,有根节点。所有,想想该怎么设置属性,毕竟数据库表就是这个样子了。
单项多对一的配置
public class Node {
private int id;
private String name;//节点名称
private int level;//层次,为了输出设计
//private boolean leaf;//是否为叶子节点,这是为了效率设计,可以可无
//父节点,因为多个节点属于一个父节点,因此用hibernate映射关系是多对一
private Node parent;
//其他的省略
}
<hibernate-mapping>
<class name="com.test.relation.entity.Node" table="node" catalog="test">
<id name="id" type="integer">
<column name="node_id" />
<generator class="native" />
</id>
<property name="name" type="string"></property>
<many-to-one name="parent" column="pid"></many-to-one>
</class>
</hibernate-mapping>
但是,结果是:
Node [id=1, level=0, name=1, parent=null]
Node [id=2, level=0, name=2, parent=null]
Node [id=3, level=0, name=3, parent=null]
Node [id=4, level=0, name=4, parent=Node [id=1, level=0, name=1, parent=null]]
单项一对多的配置
private int id;
private String name;//节点名称
private int level;//层次,为了输出设计
//private boolean leaf;//是否为叶子节点,这是为了效率设计,可以可无
//父节点,因为多个节点属于一个父节点,因此用hibernate映射关系是多对一
private Node parent;
//子节点,因为一个节点可以有多个子节点,因此用hibernate映射关系说是一对多
private Set<Node> children;
<hibernate-mapping>
<class name="com.test.relation.entity.Node" table="node" catalog="test">
<id name="id" type="integer">
<column name="node_id" />
<generator class="native" />
</id>
<property name="name" type="string"></property>
<set name="children" lazy="false" inverse="true">
<key column="pid"></key>
<one-to-many class="com.test.relation.entity.Node"/>
</set>
</class>
</hibernate-mapping>
但是,结果是:
Node [children=[Node [children=[], id=4, level=0, name=4, parent=null]], id=1, level=0, name=1, parent=null]
Node [children=[], id=2, level=0, name=2, parent=null]
Node [children=[], id=3, level=0, name=3, parent=null]
Node [children=[], id=4, level=0, name=4, parent=null]
还是四条数据,但是,现在还是查询为四条数据。是不是添加其他的条件再进行查询。不管了,先进行测试吧。
如果做双向关联关系的话,两个都配置就可以了。在这里说一下,配置了双向的问题,那么,可能会出现无限循环对象属性,然后内存溢出的问题。这个问题你不输出就没事儿,用转json的话,我用的是fastjson ,在你不喜欢的字段上添加注解 @JSONField(serialize=false)就解决了内存溢出的问题。
那么,现在应该是可以做了
不符合实际情况,但是,总得记录一下,现在接下来,测试其他链接。
- hibernate 树状自关联 *.hbm.xml 配置
- 树状自关联 hibernate配置,查询
- hibernate.hbm.xml配置
- Hibernate hbm.xml配置
- hibernate.hbm.xml配置
- hibernate.hbm.xml配置
- hibernate的关联关系hbm.xml配置模板
- Hibernate hbm.xml的配置
- hibernate 的hbm.xml配置
- hibernate 的hbm.xml配置
- hibernate 配置xx.hbm.xml
- hibernate自关联配置
- 【Hibernate总结系列】....hbm.xml配置
- 【Hibernate总结系列】....hbm.xml配置
- 【转】【Hibernate总结系列】....hbm.xml配置
- 【Hibernate总结系列】....hbm.xml配置
- 【Hibernate总结系列】....hbm.xml配置
- hibernate联合主键hbm.xml配置
- Scramble Sort
- 土地短缺可能会造成香港数据中心市场的发展减缓
- 数据分析中的统计学基础--数理统计基础
- 欢迎使用CSDN-markdown编辑器
- Docker学习笔记-- 如何使用Dockerfile构建镜像
- hibernate 树状自关联 *.hbm.xml 配置
- js离开当前页面时触发的函数
- python3.5——Pandas模块使用(下)——缺失值处理和层次索引
- There is no getter for property named 'XXX' in 'class java.lang.XXX
- springmvc的入门篇
- 1014. 福尔摩斯的约会 (20)
- LLVM学习笔记(22)
- git权威指南总结三:git重置
- FCC算法:八、重复输出字符串--Repeat a string repeat a string