【问题标题】:Spring data unusual querySpring数据异常查询
【发布时间】:2017-05-31 17:12:23
【问题描述】:

我对 Spring 数据查询有疑问。我想接收用户(列表),其中用户已赋予角色(角色在列表中)并且此用户(列表)的分配订单为空或此订单处于给定状态(状态为枚举类)。

我想出了这样的查询:

List<User> findAllByRoleContainsAndOrdersAssignedStateIsNullOrOrdersAssignedStateEquals(State state,Role role);

但它根本不起作用。这很复杂,我以前从未创建过这样的查询。你能帮我解决这个问题吗?非常感谢!

编辑: 一段代码:

@Entity
public class User implements Persistable {
...........
@Column(name = "ROLES")
@Enumerated(EnumType.STRING)
@ElementCollection(targetClass = Role.class)
private List<Role> role;
..........
@OneToMany(fetch = FetchType.LAZY, mappedBy = "driver")
private List<Order> ordersAssigned = new ArrayList<>();

}
@Entity
public class Order implements Persistable {
...........
@JoinColumn(name = "DRIVER_ID")
@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.PERSIST)
private User driver;

@Column(name = "STATE")
@Enumerated(EnumType.STRING)
private State state;
.............

}

【问题讨论】:

  • 我觉得用@Query比较好。

标签: java spring-data


【解决方案1】:

试试这样的:

@Entity
public class User {

    private String name;

    @ElementCollection
    @Column(name = "role")
    private List<Role> roles = new ArrayList<>();

    @OneToMany(mappedBy = "user")
    private List<Order> orders = new ArrayList<>();

    public User(String name, Role... roles) {
        this.name = name;
        this.roles.addAll(asList(roles));
    }

    public enum Role {
        ROLE1, ROLE2
    }
}

@Entity
public class Order {

    private String title;

    @ManyToOne
    private User user;

    private State state;

    public enum State {
        STATE1, STATE2
    }
}

public interface UserRepository extends JpaRepository<User, Long> {

    @Query("select distinct u from User u join u.orders o join u.roles r where r = ?1 and (o.state is null or o.state = ?2)")
    List<User> getUsers(User.Role role, Order.State state);
}

工作example

更多信息是herehere

【讨论】:

  • 有用户包含订单列表,其中订单包含单个状态。我需要用户角色(角色列表中的一个)等于 Role.DRIVER 并且assignedOrders (List) 为空或订单具有State.FINISHED 的用户。
  • @Unlucky 请在您的问题中添加您需要的方法的模型和接口(签名)。
  • 抱歉,不完整。就是现在。
  • @Unlucky 用private List&lt;Role&gt; roles查看更新的答案。
猜你喜欢
  • 2015-03-07
  • 2013-07-04
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 2017-06-17
  • 1970-01-01
相关资源
最近更新 更多