hibernate中两个实体类与同一张数据表进行映射后出现的问题解决
2008-04-11 12:32
423 查看
最近项目中遇到了一个子系统需要整合到它的父系统的问题,由于父系统和子系统的工程比较庞大 ,涉及到的class也是相当的多。最后不得已将其中比较关键的class对应的数据表进行了统一。那么就需要两个实体类映射到同一张数据表中。这两个实体类之间进行了继承(sobject extends fobject)。本以为这样就万事大吉了,可是没想到,在对其模块进行检索的时候问题出现了,其中父类所对应的模块检索出现了第一个问题,在执行query.setMaxResults()方法后,检索不到任何的记录。如果不执行此方法,则能够检索到数据表中的记录。但是,发现这样检索到的记录却是重复的,第二个问题出现了:其中不仅返回了所需要的对象(fobject)而且它的子类(sobject)也返回来了。后来,查了些资料才发现,自己忽略了一个问题。就是配置文件中polymorphism属性的设置问题。polymorphism默认值为 implicit 是隐式的实现多态。
Implicit (隐式)的多态是指,如果查询中给出的是任何超类、该类实现的接口或者该类的名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。
Explicit (显式)的多态是指,只有在查询中给出的明确是该类的名字时才会返回这个类的实例;同时只有当在这个<class>的定义中作为<subclass>或者<joined-subclass>出现的子类,才会可能返回。 大多数情况下,默认的polymorphism="implicit"都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。(允许一个“轻型”的类,只包含部分表字段)。
这样我就明白了,我需要更改这两个class对应的映射文件把polymorphism属性设置为explicit。这样这两个问题就解决了,程序能够从数据库中检索到记录并返回了我所需要的对象。但是,第一个问题暂时还没有弄清楚,为什么之前隐式的实现多态的话,执行query.setMaxResults()方法之后,会检索不到任何记录。以后有时间我再细细研究吧。同时也希望各位大侠如果遇到类似的问题话,能给我解释一下。
网络资料收集:
http://java.ccidnet.com/html/document/hibernate_doc.html http://www-128.ibm.com/developerworks/cn/java/j-hibernate/index.html
Implicit (隐式)的多态是指,如果查询中给出的是任何超类、该类实现的接口或者该类的名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。
Explicit (显式)的多态是指,只有在查询中给出的明确是该类的名字时才会返回这个类的实例;同时只有当在这个<class>的定义中作为<subclass>或者<joined-subclass>出现的子类,才会可能返回。 大多数情况下,默认的polymorphism="implicit"都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。(允许一个“轻型”的类,只包含部分表字段)。
这样我就明白了,我需要更改这两个class对应的映射文件把polymorphism属性设置为explicit。这样这两个问题就解决了,程序能够从数据库中检索到记录并返回了我所需要的对象。但是,第一个问题暂时还没有弄清楚,为什么之前隐式的实现多态的话,执行query.setMaxResults()方法之后,会检索不到任何记录。以后有时间我再细细研究吧。同时也希望各位大侠如果遇到类似的问题话,能给我解释一下。
网络资料收集:
http://java.ccidnet.com/html/document/hibernate_doc.html http://www-128.ibm.com/developerworks/cn/java/j-hibernate/index.html
相关文章推荐
- 解决使用HIBERNATE对ORACLE数据库中数据进行排序分页错乱的问题
- 用hibernate进行MYSQL数据存储时遇到的中文编码问题及其解决方
- 使用hibernate传入数据到数据库出现乱码问题解决
- Hibernate映射实体类时解决没有ID的问题
- hibernate自动生成映射文件和java实体类出现的问题
- hibernate两个实体类映射数据库中的同一张表,保错
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- hibernate映射oracle数据表时候出现“ORA-00903: 表名无效”问题
- 关于Hibernate自动生成表的实体类时,出现两个java文件的解决办法
- 解决Oracle透明网关连接SQL server进行数据操作出现“列名无效”问题
- Linq从两个edmx(两个数据库)中选取数据进行查找出现错误解决 (指定的 LINQ 表达式包含对与不同上下文关联的查询)
- 解决在Azure 部署SharePoint2013 数据服务器拒绝连接和域连接出现的问题
- glmis项目工作日志4_解决RecyclerView中使用CheckBox时出现数据错乱的问题。
- 解决PHPCMS会员注册未对Ucenter中会员数据进行验证的问题
- oracle insert中文数据,查询出现乱码问题解决
- hibernate实体类配置文件数据类型不匹配问题
- 多台应用同时操作一张表数据,解决并发问题
- Spring、Hibernate 数据不能插入到数据库问题解决
- android studio 进行JNI编译时出现” 编码GBK的不可映射字符 “的错误的解决方法