当从"父实体进行搜索时,如何通过值过滤Spring存储库中的结果"?

时间:2017-08-06 05:50:30

标签: java spring spring-boot

我正在使用Spring Boot,我有这些实体:

@Entity
@Table(name = "usuario")
@NamedQuery(name = "Usuario.findAll", query="select u from Usuario u where 
u.estactiv=true order by u.user")
public class Usuario implements Serializable{
...
@Column(name="usu_estactiv",nullable=false)
private boolean estactiv=true;


@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
@JsonManagedReference
private List<Roles> roles = new ArrayList<>();
...}



@Entity
@Table(name = "roles")
@NamedQuery(name = "Roles.findAll", query="select r from Roles r where 
r.estactiv=true order by r.descripcion")
public class Roles implements Serializable{
...
@ManyToOne(fetch = FetchType.LAZY)  
@JoinColumn(columnDefinition="integer", name="usu_id", nullable=false)
@JsonBackReference
private Usuario user;

@Column(name="rol_estactiv",nullable=false)
private boolean estactiv=true;
...}

在我的资料库中:

@RepositoryRestResource(collectionResourceRel = "usuario", path = "usuario")
public interface UserRepository extends PagingAndSortingRepository<Usuario, 
Integer> {

@Override
@Query
public Page<Usuario> findAll(Pageable pageable);

Usuario findByUserAndEstactivTrue(@Param("user") String user);
}



@RepositoryRestResource(collectionResourceRel = "roles", path = "roles")
public interface RolesRepository extends 
PagingAndSortingRepository<Roles,Integer>{

@Override
@Query
public Page<Roles> findAll(Pageable pageable);

@Override
@Query
public Iterable<Roles> findAll();
}

当我去网址时: http://localhost:8080/api/usuario/我得到了estactiv = true的用户:

enter image description here

但是当我去http://localhost:8080/api/usuario/1/roles时,我得到了这个:

enter image description here

我只想为每个用户获取estactiv = true的角色,例如:

用户admin(id = 1)在我的角色表中有两个角色:user(false)和admin(true),但是当我去/ api / usuario / 1 / roles我只想得到admin(真)

我希望我的问题很明确,如果没有,请告诉我以解决问题。在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

您需要在角色查询中添加表ztotal = np.concatenate([np.fliplr(z),z],axis=1) ztotal = np.concatenate([np.flipud(ztotal),ztotal],axis=0) xtotal = np.concatenate([-x[::-1],x],axis=0) ytotal = np.concatenate([-y[::-1],y],axis=0) plt.figure() plt.contourf(xtotal,ytotal,ztotal) plt.show() 的连接,以便过滤usario表的estactiv属性。查询应如下所示:

usario

答案 1 :(得分:0)

尝试进一步过滤列表,使用Query string并将参数作为URL中的查询字符串传递,如下所示:

http://localhost:8080/api/usuario/1/roles?estactiv=true. 

现在,您可以根据此查询字符串过滤输出结果尝试通过编写新的查询/代码来过滤您的数据。

答案 2 :(得分:0)

我正在阅读文档,我找到了解决方案:

首先在我的RolesRepository中,我声明了这个方法:

public Collection<Roles> findByEstactivTrueAndUserId(@Param("user") Integer 
user);

然后在我的UserController中:

 @GetMapping("/api/usuario/{userId}/roles")
    public Collection<Roles> getRoles(@PathVariable Integer userId) {
        return rolRepo.findByEstactivTrueAndUserId(userId);
 }

当我转到http://localhost:8080/api/usuario/1/roles时,对于id = 1的usuario,我只获得estactiv = true的角色。