论坛首页 入门技术论坛

hibernate的filter-def的bug?

浏览 2115 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-10-09   最后修改:2009-10-09
使用hibernate的filter功能时候发现了一个dtd定义的bug,我的是31的最新的应该早修正了

filter-def在dtd中出现顺序的问题,出现异常

13:36:37,748 ERROR XMLHelper:81 - Error parsing XML: XML InputStream(21) The content of element type "hibernate-mapping" must match "(meta*,typedef*,import*,(class|subclass|joined-subclass|union-subclass)*,resultset*,(query|sql-query)*,filter-def*,database-object*)"





修改方法:

hibernate-mapping-3.0.dtd文件位于org/hibernate目录中,注意debug文件的时候记得从resources目录中copy过去,要不然会从publicid指向上进行网络效验,要不然就会出现

by: org.dom4j.DocumentException: hibernate.sourceforge.net Nested exception: hibernate.sourceforge.net

dom4j效验失败



这是原来的hibernate-mapping-3.0.dtd文件
<!ELEMENT hibernate-mapping (
meta*,
typedef*,
import*,
(class|subclass|joined-subclass|union-subclass)*,
    resultset*,
(query|sql-query)*,
filter-def*,
    database-object*
)>

修改后的文件为:
<!ELEMENT hibernate-mapping (
meta*,
typedef*,
import*,
filter-def*,
(class|subclass|joined-subclass|union-subclass)*,
    resultset*,
(query|sql-query)*,
    database-object*
)>



原因:

解析class中的filter子元素时候需要从mapping对象中查找到预定义filter-def内容,

private static void parseFilter(Element filterElement, Filterable filterable, Mappings model) {
//......
if ( StringHelper.isEmpty(condition) ) {
log.info(name);
condition = model.getFilterDefinition(name).getDefaultFilterCondition();
}
//......


hbm.xml解析试按照顺序来的,如果顺序 所以需要预先定义好filter-def后, class定义中才能使用filter,

可是在dtd中filter-def定义位于class后面,出现了问题。


论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics