我在Eclipse中基于mariadb、hibernate、spring-boot等常用库编写了一个Spring小项目。当我正常运行我的应用程序时,它在大约十秒内完成启动:
2019-11-07 19:53:47.539 INFO 2887 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.3.11.Final}
2019-11-07 19:53:47.541 INFO 2887 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2019-11-07 19:53:47.687 INFO 2887 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.4.Final}
2019-11-07 19:53:47.799 INFO 2887 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MariaDB103Dialect
2019-11-07 19:53:55.078 INFO 2887 --- [ main] o.h.t.schema.internal.SchemaCreatorImpl : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@3400d6fa'
2019-11-07 19:53:55.083 INFO 2887 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory …Run Code Online (Sandbox Code Playgroud) 我写了两个规范,如果它们的参数为 null,则返回 null。
public static Specification<Prodotto> getProdottoByLineaSpec (String linea) {
if (linea != null) {
return (root, query, criteriaBuilder) -> {
return criteriaBuilder.like((root.join("linea")).get("nome"), "%"+linea+"%");
};
}
else return null;
}
public static Specification<Prodotto> getProdottoByIngSpec (String ing) {
if (ing != null) {
return (root, query, criteriaBuilder) -> {
return criteriaBuilder.like(((root.join("listaQuoteIng")).join("ing")).get("nome"), "%"+ing+"%");
};
}
else return null;
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了第三个,将前一个与子句中的and运算符结合起来where:
public static Specification<Prodotto> getProdottoByMainTraits (String linea, String ing) {
return Specification.where(getProdottoByLineaSpec(linea).and(getProdottoByIngSpec(ing)));
}
Run Code Online (Sandbox Code Playgroud)
现在,这是有趣的部分:
ByLinea回报null,我得到一个 …