如何查询Spring Data和One To Many?

时间:2018-04-19 06:51:03

标签: java spring spring-boot spring-data

我有几个实体:

任务:

@Entity
@Data
public class Task {

    @Id
    @GeneratedValue
    private long id;

    private String title;

    private boolean done;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;
}

用户:

@Data
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String firstName;

    private String lastName;

    @OneToMany(mappedBy = "user")
    private List<Task> tasks;
}

问题是spring data查询具有任务条件的user实体。我想做这样的事情:

public interface UserRepository extends CrudRepository<User, Long> {
    Optional<Stream<User>> getAllByTasksDoneTrue();
}

但它不起作用。如何进行查询以使用户完成任务?

2 个答案:

答案 0 :(得分:0)

以下问题应该有效

public interface UserRepository extends CrudRepository<User, Long> {
    List<User> findAllByTask_Done(boolean status);
}

答案 1 :(得分:0)

你可以尝试这样的事情(但应该有更好的方法!):

public interface UserRepository extends CrudRepository<User, Long> {
    @Query("select u from User u where 0 = (select count(t) from u.tasks t where t.done = 'false')");
    List<User> getAllByTasksDoneTrue();
}

一个小评论是,t.done = 'false'可能应该更改。

我知道有些数据库根本不支持布尔类型,因此条件取决于此done属性实际存储在数据库中的方式。