如何对 Postgresql 数组进行 JPA 查询?

2023-12-01

如何使用 text[] 列查询 Postgresql 表的模型:

@TypeDefs({
    @TypeDef(
        name = "string-array", 
        typeClass = StringArrayType.class
    )
})

@Entity
@Table(name = "names")
public class Names implements Serializable
{  
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, updatable = false)
    private Integer id;
    
    @Column(name = "name", nullable = false)
    private String name;
    
    @Type(type = "string-array")
    @Column(name = "tags", columnDefinition = "text[]")
    private String[] tags;
    
    ...
}

这是我尝试过的 CrudRepository 查询,但验证失败:

@Query("SELECT t FROM Names t WHERE :tag MEMBER OF t.tags")
Iterable<Names> findByTag(@Param("tag") String tag);

我可以找到有关如何插入、更新和删除 SQL 数组的示例和文档,但没有找到有关如何查询它们的信息。


当我想查询数组类型(INTEGER[])列中是否包含特定参数值(INTEGER)时,我遇到了同样的问题。

... WHERE :type MEMBER OF (TABLENAME.typeArray)...=> 验证失败并出现 NullPointerException

... WHERE :type ANY(TABLENAME.typeArray)...=> 验证失败,因为“TABLENAME”是意外标记

...WHERE :type IN (TABLENAME.typeArray)...=> 通过验证,但在执行过程中失败operator does not exist: integer = integer[]

最终对我有用的是提出的解决方案法布里西奥·科伦坡在对上述答案之一的评论中 - 感谢他,我只是重新发布解决方案以获得更好的可见性,因为在找到它之前我也挣扎了一段时间。

@Query(value = "SELECT * FROM TABLE WHERE :type = ANY(TABLE.ARRAY_COLUMN)", nativeQuery = true)    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对 Postgresql 数组进行 JPA 查询? 的相关文章

随机推荐