在Hibernate中使用javax.persistence.criteria.CriteriaQuery构建xPath



我想从MS SQL服务器数据库中获取记录,其中我有名为xmlData的XML类型列。

我想使用条件执行查询:/record/mark = 5类似于:

Query query = session.createQuery("From Test WHERE xmlData.value('(/record/mark)[1]', 'varchar(max)') like '5'");
List list = query.list();

xml数据列结构:

<record>
<name>John</name>
<mark>5</mark>
</record>

我的代码:

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Test> criteria = builder.createQuery( Test.class );
Root<Test> root = criteria.from( Test.class );
criteria.select( root );
criteria.where( builder. ); // <- how to biuld query ? 
Test yourObject = session.createQuery( criteria ).uniqueResult();

我不能代表Java部分,但我可以做sql-server部分。

SELECT * FROM Test WHERE xmlData.exist ( '/record/mark[text() = "5"]' ) = 1

这更快,因为我们在 XQuery 中执行所有字符串匹配

但这可能不适合,因为它代表您的数据。因为您需要一个值,所以您被迫在查询中指定第一个实例[1]。此代码将匹配具有多个标记的内容,其中第一个不是五个,而是后续标记。显然,这在您的用例中可能无关紧要。

<record>
<name>Louise</name>
<mark>10</mark>
<mark>5</mark>
</record>

Sql Fiddle

最新更新