我在休眠配置 xml 中使用带有命名查询的休眠 3。
命名查询最初将日期与用户输入的日期匹配,并且工作正常。但是当我将等号('=')更改为小于('<=')时,它给了我以下错误。
Caused by: org.hibernate.MappingException: Could not parse mapping document in input stream
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:431)
at org.hibernate.cfg.Configuration.addResource(Configuration.java:482)
... 106 more
Caused by: org.dom4j.DocumentException: Error on line 57 of document : The content of elements must consist of well-formed character data or markup. Nested exception: The content of elements must consist of well-formed character data or markup.
at org.dom4j.io.SAXReader.read(SAXReader.java:482)
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:422)
... 107 more
这是因为 XML 解析器不允许标签内容中包含“<”或“>”。但是 '<' 或 '>' 是形成 <= 或 >= 比较所必需的。是否有另一种表示大于或小于解析器满意的方法。
注意:我已经知道我们可以将命名查询作为注释放在代码中,但为了系统一致性,我更喜欢这种方式。
示例命名查询:
<sql-query name="persons">
<return alias="person" class="eg.Person"/>
SELECT person.NAME AS {person.name},
person.AGE AS {person.age},
person.SEX AS {person.sex}
FROM PERSON person
WHERE person.NAME LIKE :namePattern
AND trim(person.JOINDATE) <= to_date(:joinDate, 'dd-mm-yyyy')
</sql-query>