gpt4 book ai didi

jpa - Spring Data + JPA的过滤器

转载 作者:行者123 更新时间:2023-12-04 08:06:52 25 4
gpt4 key购买 nike

有什么方法可以为Spring数据存储库定义允许过滤数据的通用过滤器,类似于Hibernate可用的过滤器?举个例子,如果我可以做这样的事情,那将很酷:

@FilterDef(name = "clientSecurity", defaultCondition = "clientId in (:allowableClients)", parameters = { @ParamDef(name = "allowableClients", type = "Long") })
public interface DocumentRepository extends Repository<Document, Long> {
public List<Document> findAll();
}

因此,在上面的示例中,我的文档存储库将仅返回允许的客户端ID集中属于客户端的所有文档。

最佳答案

我通过使用自定义存储库使此工作正常进行。据我所知,这是您所期望的那种简单的方法。以下是我对下面给出的Comment实体所做的操作。

@Entity
@FilterDef(name="filterByEmail", parameters={@ParamDef(name="email", type="string")})
@Filters( {
@Filter(name="filterByEmail", condition=":email = email")
} )
public class Comment {

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

private String firstname;
private String lastname;
private String email;
}

定义存储库如下
@Repository
@Transactional
public interface CommentRepository extends CrudRepository<Comment, Long>,CommentRepositoryCustom {
}

在定制存储库中,获取 EntityManager的句柄并启用 session 。
public class CommentRepositoryImpl implements CommentRepositoryCustom{

@PersistenceContext
private EntityManager entityManager;

@Autowired
private CommentRepository commentRepository;

@Override
public Iterable<Comment> findCommentWithEmail(String email) {
Filter filter = (Filter)entityManager.unwrap(Session.class).enableFilter("filterByEmail");
filter.setParameter("email", "arun.menon");
Iterable<Comment> iterable = commentRepository.findAll();
entityManager.unwrap(Session.class).disableFilter("filterByEmail");
return iterable;
}

}

以下是执行的测试。
public void run(String... arg0) throws Exception {
Iterable<Comment> iterable = commentService.findCommentWithEmail("test@test.com");
System.out.println("User ois" + iterable);
}

如果您需要更通用的解决方案,请引用 here

关于jpa - Spring Data + JPA的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30430187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com