Hibernate数据库插入顺序如何控制?

fingertiploneliness 2004-12-21 09:43:01
public void testAddChild() {
NodeDAO ndao = new NodeDAO();
Node node = ndao.findByID(5);
Node n1 = new Node("grade 1","grade");
Node n2 = new Node("grade 2","grade");
Node n3 = new Node("grade 3","grade");
node.addChildNode(n1);
node.addChildNode(n2);
node.addChildNode(n3);
HibernateUtil.commitTransaction();
HibernateUtil.closeSession();
}
其中 Node对应表有auto_increment的id自段,generator=native,执行操作后,数据表中结果如下:

mysql> select * from node;
+----+---------+--------+----------------+
| ID | NAME | TYPE | PARENT_NODE_ID |
+----+---------+--------+----------------+
| 5 | myschool| school | NULL |
| 14 | grade 1 | grade | 5 |
| 12 | grade 3 | grade | 5 |
| 13 | grade 2 | grade | 5 |
+----+---------+--------+----------------+

并不保证先创建的Node得到最小的id,怎么做才能保证如下结果

mysql> select * from node;
+----+---------+--------+----------------+
| ID | NAME | TYPE | PARENT_NODE_ID |
+----+---------+--------+----------------+
| 5 | myscholl| school | NULL |
| 12 | grade 1 | grade | 5 |
| 13 | grade 2 | grade | 5 |
| 14 | grade 3 | grade | 5 |
+----+---------+--------+----------------+
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
IceCraft 2004-12-22
  • 打赏
  • 举报
回复
hibernate的映射可以使用long也可以使用Long,都支持。
推荐使用Long的原因是:
hibernate的内核在处理long型的时候,会把long型数据转换成Long型来处理,然后再转回long。
这中间就增加了一些转型操作,反而降低了效率,所以推荐使用Long型。
IceCraft 2004-12-22
  • 打赏
  • 举报
回复
hibernate映射id时候用Long而不是long,大概是因为Long可以是null的原因,但是当结合struts时候遇到问题
<bean:write name="node" property="id"/>,这样写不行,因为getId()返回的是Long,我用
<bean:fefine id="node2" name="node" property="id"/>,但是<bean:write name="node2"/>也同样报错!!!这个问题怎么处理?
---------------------------------------------------
即使字段是Long型,仍然可以用bean:write或nested:write来显示,没有问题的。
例如我有一个持久化类型Node,它的id是Long型。在actionForm中用它声明一个属性:
private Node node;还有get和set方法。
在jsp中:
使用
<nested:nest property="node">
<nested:write property="id"/>
</nested:nest>
可以显示出来。
sgdb 2004-12-22
  • 打赏
  • 举报
回复
hibernate建议主键不带有任何意义,

要么试试increment,只是increment在多个进程的时候会出现问题

要么再加个时间字段来记录插入顺序
sep11 2004-12-22
  • 打赏
  • 举报
回复
关注,学习!~
programeyonger 2004-12-22
  • 打赏
  • 举报
回复
进来学习一下!
  • 打赏
  • 举报
回复
今天再up一次,望高手指教
IceCraft 2004-12-22
  • 打赏
  • 举报
回复
struts有多种标记html、bean、logic等等,nested是专用于bean里又嵌套了bean,多层嵌套的时候用的,它包含了前面三种标记,开发中非常好用,你找点资料学习一下。
比如html:text,nested就有nested:text
bean:write就有nested:write
logic:equal就有nested:equal等等
bluemeteor 2004-12-22
  • 打赏
  • 举报
回复
用long的时候 数据库中字段为null时会报错...用Long就不会乐

至于第一个问题....没遇到过...去http://forum.javaeye.com/ 这里问问吧 专业些
  • 打赏
  • 举报
回复
IceCraft(心淡情浓):
<nested: 这个是sturts tag lib的一部分嘛?
loverisyour 2004-12-21
  • 打赏
  • 举报
回复
一次加一个不就行拉,呵呵,开玩笑的,还真没注意过这些东西
  • 打赏
  • 举报
回复
没人回答!解决下面的问题给这100分:
hibernate映射id时候用Long而不是long,大概是因为Long可以是null的原因,但是当结合struts时候遇到问题
<bean:write name="node" property="id"/>,这样写不行,因为getId()返回的是Long,我用
<bean:fefine id="node2" name="node" property="id"/>,但是<bean:write name="node2"/>也同样报错!!!这个问题怎么处理?
  • 打赏
  • 举报
回复
回复人: loverisyour(我是民工又咋的,不能搞开发啊!)

高手

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧