【发布时间】:2020-01-05 06:01:17
【问题描述】:
这些是我的表的结构,我想通过 JPA Criteria Builder 使用 LIKE 搜索电影标题来查找标题和名称
CREATE TABLE `tbl_movies` (
`id` BIGINT (5) NOT NULL AUTO_INCREMENT,
`director_id` BIGINT (3) NOT NULL,
`title` VARCHAR (50) NOT NULL,
`status` ENUM ('active', 'inactive', 'pending') NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY (`id`),
UNIQUE KEY (`title`),
FOREIGN KEY (`director_id`) REFERENCES `tbl_directors` (`id`)
) ;
CREATE TABLE `tbl_directors` (
`id` BIGINT (3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR (50) NOT NULL,
`status` ENUM ('active', 'inactive', 'pending') NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY (`id`),
UNIQUE KEY (`name`)
) ;
这是服务中的代码
public List<Movie> searchByAnything(String movieTitle, String directorName) {
return movieRepository.findAll((Root<Movie> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (movieTitle.length() > 0) {
predicates.add(criteriaBuilder.like(root.join("tbl_directors").<String>get("title"), "%" + movieTitle + "%"));
}
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
});
}
我哪里做错了?调试时我得到大小为 0 的列表。 如果我能得到任何帮助,那就太好了。
【问题讨论】:
-
也许您想向我们展示 Java Entities 而不是用于创建表的 sql 脚本?
-
您说您想返回一个 DTO,但 Movie 似乎是一个实体。顺便提一句。您目前不能使用规范返回 DTO:jira.spring.io/browse/DATAJPA-51
标签: spring-boot spring-data-jpa criteria-api