我有几个实体:
任务:
@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();
}
但它不起作用。如何进行查询以使用户完成任务?
答案 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
属性实际存储在数据库中的方式。