在Criteria中使用自定义转换器的Hibernate IN/ANY

byqmnocz  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(151)

我有一个简单的模型

class A {
        @Type(type = "com.vivek.persistence.ListAsSQLArrayUserType")
        @Column(name = "string_array", columnDefinition = "text[]")
        List<String> stringArray;
    }

字符串
现在我想搜索stringArray列中存在的任何项。我可以简单地使用SQL Native Query:

select * from A WHERE 'abc' = any(string_array)


但是我无法通过Hibernate Criteria API找到任何方法。我已经尝试了 *IN predicate *,但它根本不起作用,并返回空结果。如果你能帮忙的话,我将不胜感激。

q8l4jmvw

q8l4jmvw1#

我已经找到了解决方案,可以使用 criteriaBuilder.function() 来特定于postgres。它解决了我的问题。

String value = "abc"; // anything
criteriaBuilder.equal(criteriaBuilder.literal(value), criteriaBuilder.function("any", String.class, root.get(name)));

字符串

5anewei6

5anewei62#

在@Vivek Dhiman回答的帮助下,我将下面的解决方案应用于ENUM类型的列。构建标准时:
使用前:

builder.equal(from.get("columnName"), criteria.getValue());

字符串
之后:

builder.equal(from.get("columnName"), HttpMethod.valueOf(criteria.getValue()));


栏目

@Enumerated(EnumType.STRING)
@Column(name = "column_name")
private HttpMethod columnName;


建设者:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();

相关问题