Java 整数[]列,其中包含JPA CriteriaBuilder中的任何运算符
我在下表中工作:Java 整数[]列,其中包含JPA CriteriaBuilder中的任何运算符,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我在下表中工作: @Entity @Table(name = "employees") public class Employee { @Id @Column(name = "id") private Integer id; @Column(name = "name") private String fullName; @Column(name = "skill_ids", columnDefinition = "integer[]")
@Entity
@Table(name = "employees")
public class Employee {
@Id
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String fullName;
@Column(name = "skill_ids", columnDefinition = "integer[]")
@Type(type = "com.example.utils.IntegerArrayUserType")
private List<Integer> skillIds;
// getters, setters ...
}
上述方法显然会生成org.postgresql.util.PSQLException:错误:运算符不存在:integer[]=integer
。如何实现规范.toPredicate
方法以正确方式获取员工
实体?在纯SQL中,我可以通过这种方式获取所有需要的行(例如对于skillid
=[1,2]):
但是,我必须使用
CriteriaBuilder
,因为有一些额外的规范使用这种方法。要解决您的问题,您必须使用自定义的标准。这里有一个如何实现自己标准的示例
通过这种方式,您将能够构造所需的查询。请注意,这将取决于RDBMS 除非序列化数组,否则无法将其保存到数据库中。这将使它成为一个blobskillIds
数组,并将其保存到数据库中,不会出现问题。有序列化,但我想知道如何从数据库中获取特定行。使用JOINS
可以做到这一点。@antoniosss您的意思是:Join-Join=root.Join(“skillIds”)代码>在toPredicate
中?我如何使用这个连接?就像你做的那样join(“xxx”).get(“propname”)
,你知道JPA API中的钻取(简单等于谓词)?标准真的,我恐怕不能像@BillyFrost评论的那样在JPAAPI中使用用户标准
public Specification<Employee> attributeListVsList(List<Integer> skillIds) {
return (root, query, builder) -> {
Expression<List<Integer>> attributeValuesList = root.get("skillIds");
return builder.or(attributeValuesList.in(skillIds));
}
}
SELECT * FROM employees
WHERE 1 = ANY (skill_ids) AND
2 = ANY (skill_ids);