如何使用 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(使用前将#替换为@)