假设我有一个Hibernate/JPA实体如下:
@Entity
public class FooEntity {
...
@Type(type = "hstore")
HashMap<String, String> tags;
}
字符串
...而hstore
Type是来自this资源的简单UserType实现。
有没有一种方法可以在JPQL查询中访问hstore,类似于下面的伪代码:
SELECT f FROM FooEntity f WHERE f.tags CONTAINS KEY(:key)
型
3条答案
按热度按时间jslywgbw1#
您也可以简单地创建一个Hibernate org. hibernate. usertype. UserType。你扩展了那个类;我们自己实现的一个例子:
字符串
}
现在你可以在Entity bean中使用它,如下所示:
型
laawzig22#
Hibernate提供了一个跨许多DB的通用查询抽象,因此很难抽象出非SQL语法。
我会使用一个本地查询来获取id,并使用它们来获取Hibernate实体,如果您确实需要的话。
如果您只对投影感兴趣,那么原生查询是您的最佳选择。
sqougxex3#
下面是一个如何将HStore与Hibernate一起使用的示例。
首先编写一个用户类型:
字符串
其次编写一个SQL函数适配器:
型
并以自定义方言进行注册:
型
因此,您将能够在以下实体中使用它:
型
以及在JPQL查询中,例如:
型
有关更深入的文章以及完整的代码示例,请参阅:https://walczak.it/blog/performant-internationalization-in-postgresql-hibernate-jpa-hstore-column-with-translations