發現個 hibernate Bug 找討論

k0yang 2011-02-25 03:48:13
User類如下
public class User {

private String id;
private String[] names;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String[] getNames() {
return names;
}

public void setNames(String[] names) {
this.names = names;
}

}

User.hbm.xml 如下
<hibernate-mapping>
<class name="hui.yang.hibernate.User" table="t_user">
<id name="id">
<generator class="uuid" />
</id>
<array name="names" table="t_array" inverse="false" >
<key column="aid"></key>
<list-index column="indexId"></list-index>
<element type="java.lang.String" column="names"></element>
</array>
</class>
</hibernate-mapping>

在此种情况下对 User 进行增删改查无任何错误

但当使用hibernate监听器时,监听器代码如下

public class Listener implements PostInsertEventListener,PreInsertEventListener {

public void onPostInsert(PostInsertEvent event) {
System.out.println(event.getEntity().getClass().getName()+"----------------");
}

public boolean onPreInsert(PreInsertEvent event) {
System.out.println(event.getEntity().getClass().getName()+"-111----------");
return true;
}

}

在添加类User 时报错 代码如下

07:43:32,758 ERROR JDBCExceptionReporter:72 - Cannot add or update a child row: a foreign key constraint fails (`hibernate/t_array`, CONSTRAINT `FK9FFBAECE685089E8` FOREIGN KEY (`aid`) REFERENCES `t_user` (`id`))

我重新设置监听器
public class Listener implements PostInsertEventListener,PreInsertEventListener {

public void onPostInsert(PostInsertEvent event) {
System.out.println(event.getEntity().getClass().getName()+"----------------");
}

public boolean onPreInsert(PreInsertEvent event) {
System.out.println(event.getEntity().getClass().getName()+"-111----------");
return false;
}

}

一切正常

另一种情况
修改User.hbm.xml 如下
<hibernate-mapping>
<class name="hui.yang.hibernate.User" table="t_user">
<id name="id">
<generator class="uuid" />
</id>
<array name="names" table="t_array" inverse="true" >
<key column="aid"></key>
<list-index column="indexId"></list-index>
<element type="java.lang.String" column="names"></element>
</array>
</class>
</hibernate-mapping>

则无法持久化User类中的
private String[] names;
属性

各位大大给点意见 请问是否有什么别的解决方法

...全文
52 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackey_ctdw 2011-02-25
  • 打赏
  • 举报
回复
这样使用hibernate监听器我没用过 ,
我一般 用的 是SSH
hibernate的监听器一般 都 在 spring 中配置了
如果你对Hibernate和对象/关系数据库映射还是个新手,或者甚至对Java也不熟悉,请按照下面的步骤来学习。

阅读第 1 章 Hibernate入门 ,这是一篇包含详细的逐步指导的指南。本指南的源代码包含在发行包中,你可以在doc/reference/tutorial/目录下到。

阅读第 2 章 体系结构(Architecture)来理解Hibernate可以使用的环境。

查看Hibernate发行包中的eg/目录,里面有一个简单的独立运行的程序。把你的JDBC驱动拷贝到lib/目录下,修改一下src/hibernate.properties,指定其中你的数据库的信息。进入命令行,切换到你的发行包的目录,输入ant eg(使用了Ant),或者在Windows操作系统中使用build eg。

把这份参考文档作为你学习的主要信息来源。

Hibernate 的网站上可以到经常提问的问题与解答(FAQ)。

Hibernate网站上还有第三方的演示、示例和教程的链接。

Hibernate网站的“社区(Community Area)”是讨论关于设计模式以及很多整合方案(Tomcat, JBoss AS, Struts, EJB,等等)的好地方。

如果你有问题,请使用Hibernate网站上链接的用户论坛。我们也提供一个JIRA问题追踪系统,来搜集bug报告和新功能请求。如果你对开发Hibernate有兴趣,请加入开发者的邮件列表。(Hibernate网站上的用户论坛有一个中文版面,JavaEye也有Hibernate中文版面,您可以在那里交流问题与经验。)

商业开发、产品支持和Hibernate培训可以通过JBoss Inc.获得。(请查阅:http://www.hibernate.org/SupportTraining/)。 Hibernate是一个专业的开放源代码项目(Professional Open Source project),也是JBoss Enterprise Middleware System(JEMS),JBoss企业级中间件系统的一个核心组件。

1. 翻译说明
本文档的翻译是在网络上协作进行的,也会不断根据Hibernate的升级进行更新。提供此文档的目的是为了减缓学习Hibernate的坡度,而非代替原文档。我们建议所有有能力的读者都直接阅读英文原文。若您对翻译有异议,或发现翻译错误,敬请不吝赐教,报告到如下email地址:cao at redsaga.com

Hibernate版本3的翻译由满江红翻译团队(RedSaga Translate Team)集体进行,这也是一次大规模网络翻译的试验。在不到20天的时间内,我们完成了两百多页文档的翻译,这一成果是通过十几位网友集体努力完成的。通过这次翻译,我们也有了一套完整的流程,从初译、技术审核一直到文字审核、发布。我们的翻译团队还会继续完善我们的翻译流程,并翻译其他优秀的Java开源资料,敬请期待。
如果你对Hibernate和对象/关系数据库映射还是个新手,或者甚至对Java也不熟悉,请按照下面的步骤来学习。

阅读第 1 章 Hibernate入门 ,这是一篇包含详细的逐步指导的指南。本指南的源代码包含在发行包中,你可以在doc/reference/tutorial/目录下到。

阅读第 2 章 体系结构(Architecture)来理解Hibernate可以使用的环境。

查看Hibernate发行包中的eg/目录,里面有一个简单的独立运行的程序。把你的JDBC驱动拷贝到lib/目录下,修改一下src/hibernate.properties,指定其中你的数据库的信息。进入命令行,切换到你的发行包的目录,输入ant eg(使用了Ant),或者在Windows操作系统中使用build eg。

把这份参考文档作为你学习的主要信息来源。

Hibernate 的网站上可以到经常提问的问题与解答(FAQ)。

Hibernate网站上还有第三方的演示、示例和教程的链接。

Hibernate网站的“社区(Community Area)”是讨论关于设计模式以及很多整合方案(Tomcat, JBoss AS, Struts, EJB,等等)的好地方。

如果你有问题,请使用Hibernate网站上链接的用户论坛。我们也提供一个JIRA问题追踪系统,来搜集bug报告和新功能请求。如果你对开发Hibernate有兴趣,请加入开发者的邮件列表。(Hibernate网站上的用户论坛有一个中文版面,JavaEye也有Hibernate中文版面,您可以在那里交流问题与经验。)

商业开发、产品支持和Hibernate培训可以通过JBoss Inc.获得。(请查阅:http://www.hibernate.org/SupportTraining/)。 Hibernate是一个专业的开放源代码项目(Professional Open Source project),也是JBoss Enterprise Middleware System(JEMS),JBoss企业级中间件系统的一个核心组件。

翻译说明
本文档的翻译是在网络上协作进行的,也会不断根据Hibernate的升级进行更新。提供此文档的目的是为了减缓学习Hibernate的坡度,而非代替原文档。我们建议所有有能力的读者都直接阅读英文原文。若您对翻译有异议,或发现翻译错误,敬请不吝赐教,报告到如下email地址:cao at redsaga.com

Hibernate版本3的翻译由满江红翻译团队(RedSaga Translate Team)集体进行,这也是一次大规模网络翻译的试验。在不到20天的时间内,我们完成了两百多页文档的翻译,这一成果是通过十几位网友集体努力完成的。通过这次翻译,我们也有了一套完整的流程,从初译、技术审核一直到文字审核、发布。我们的翻译团队还会继续完善我们的翻译流程,并翻译其他优秀的Java开源资料,敬请期待。
在当今的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping (ORM))这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。 NHibernate不仅仅管理.NET类到数据库表的映射(包括.NET数据类型到SQL数据类型的映射),还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和ADO.NET处理数据的时间。 NHibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。对于以数据为中心的程序来说,它们往往只在数据库中使用存储过程来实现商业逻辑,NHibernate可能不是最好的解决方案;对于那些在基于.NET的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,NHibernate是最有用的。不管怎样,NHibernate一定可以帮助你消除或者包装那些针对特定厂商的SQL代码,并且帮你把结果集从表格式的表示形式转换到一系列的对象去。 如果你对NHibernate和对象/关系数据库映射还是个新手,或者甚至对.NET也不熟悉,请按照下面的步骤来学习。 花30分钟阅读1. 第一个NHibernate应用程序 ,这是一篇包含详细的逐步指导的指南。 阅读 2. 体系结构来理解NHibernate可以使用的环境。 把这份参考文档作为你学习的主要信息来源。 考虑读一下 Hibernate in Action (http://www.manning.com/bauer/) 或者是NHibernate in Action (http://www.manning.com/kuate/) 如果你在程序开发上需要更多的帮助或者是你更倾向于一个手把手的教程,那么你可以看看 http://nhibernate.sourceforge.net/NHibernateEg/,这是一个基于NHibernate的实例教程。 常见的问题和会在可以NHibernate社区博客到。 第三方演示,例子教程的链接可以在 NHibernate资源到。 NHibernate网站的“社区(Community Area)”是讨论关于设计模式以及很多整合方案(ASP.NET, Windows Forms,等等)的好地方。 如果你有问题,请使用NHibernate网站上链接的用户论坛。我们也提供一个JIRA问题追踪系统,来搜集bug报告和新功能请求。如果你对开发NHibernate有兴趣,请加入开发者的邮件列表。如果你有兴趣翻译该文档,请通过开发者的邮件列表里与我们联系。

67,512

社区成员

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

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