相关疑难解决方法(0)

真正动态的JPA CriteriaBuilder

我需要创建一个"真正的"动态JPA CriteriaBuilder.我得到Map<String, String>了陈述.看起来像:

name : John
surname : Smith
email : email@email.de

...more pairs possible
Run Code Online (Sandbox Code Playgroud)

这是我实现的:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> query = cb.createQuery(User.class);
Root<User> userRoot = query.from(User.class);
query.select(userRoot);

List<Predicate> predicates = new ArrayList<Predicate>();
Iterator<String> column = statements.keySet().iterator();
while (column.hasNext()) {

    // get the pairs
    String colIndex = column.next();
    String colValue = statements.get(colIndex);

    // create the statement
    Predicate pAnd = cb.conjunction();
    pAnd = cb.and(pAnd, cb.equal(userRoot.get(colIndex), colValue));
    predicates.add(pAnd);
}

// doesn't work, i don't know how many predicates …
Run Code Online (Sandbox Code Playgroud)

java jpa criteria-api jpa-2.0

47
推荐指数
3
解决办法
7万
查看次数

Spring数据JPA和可以为null的参数

我的理解是,使用Spring数据JPA我不能有一个查询方法来获取列等于给定的非null方法参数的所有行,并且当method参数为null时,使用相同的方法获取此列为NULL的所有行.

那是对的吗?

所以我必须在我的JAVA代码中区分它,我必须使用一个单独的查询方法显式询问空值,如下例所示?

// Query methods
List<Something> findByParameter(Parameter parameter);
List<Something> findByParameterIsNull();

...

List<Something> result = new ArrayList<>();

if (parameter == null)
  result = findByParameterIsNull();
else
  result = findByParameter(parameter);
Run Code Online (Sandbox Code Playgroud)

这很糟糕,如果我有4个参数可以为null并且必须编码16种不同的查询方法.

java parameters null spring-data-jpa

28
推荐指数
4
解决办法
4万
查看次数

如何使用Spring以一种安静的方式过滤数据?

正如标题所说.

我基本上会喜欢这样的请求

/api/todos/?completed=eq.true&created_at=lt.1486462109399
Run Code Online (Sandbox Code Playgroud)

有没有准备好spring way实现这样的?类似于Page/Pageable机制的东西会很棒.

如果没有,我想我可以使用Hibernate Criteria Queries&Argument Re-solvers来实现它.基本上允许我写我的控制器像

 @GetMapping
 public ResponseEntity<Page<TodoDTO>> listAll(Criteria criteria, Pageable pageable) 
 {
        Page<Todo> todos = todoService.listAll(criteria, pageable)
        ...
 }
Run Code Online (Sandbox Code Playgroud)

自定义参数解析器将负责将查询字符串转换为条件.我还不确定如何在服务中处理它,但这是我试图实现它的方向.

这会是一个好方法吗?有什么建议?(所有假设已经没有现成的机制).

非常感谢您的帮助.

java rest spring hibernate filter

13
推荐指数
2
解决办法
1万
查看次数