首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JpaRepository通过登录的用户上下文查找实体

JpaRepository通过登录的用户上下文查找实体
EN

Stack Overflow用户
提问于 2016-06-22 21:52:30
回答 1查看 640关注 0票数 10

我使用Spring Boot、Hibernate和JPA存储库来搜索数据。我想根据登录用户的上下文过滤搜索结果。例如,是否使用Find方法返回登录用户所拥有的所有实体?我有许多用于过滤的JPA方法,我不想在附加约束的情况下编辑所有这些方法。有没有可能是动态的?

EN

回答 1

Stack Overflow用户

发布于 2018-06-29 00:59:01

您可以为会话创建hibernate过滤器和enableFilter,如下所示

代码语言:javascript
复制
/**
 * @author ali akbar azizkhani
 */
@Entity
@Table(name = "post")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Filter(name = "filter",condition = "created_By=:user")
@FilterDef(name = "filter", defaultCondition = "deleted=0",parameters = {
        @ParamDef(name = "user",type = "string")
})
public class Post {

    @Id
    @GeneratedValue
    Long id;

    @Column(name = "title")
    String title;

    @Column(name = "deleted")
    boolean deleted = false;

    @OneToMany(mappedBy = "post")
    Set<PostComment> commentList = new HashSet<>();

    @Column(name = "createdBy")
    String createdBy;

}

,然后使用方面启用过滤器。

代码语言:javascript
复制
@Aspect
@Component
class EnableFilterAspect {

    @AfterReturning(
            pointcut = "bean(entityManagerFactory) && execution(* createEntityManager(..))",
            returning = "retVal")
    public void getSessionAfter(JoinPoint joinPoint, Object retVal) {
        if (retVal != null && EntityManager.class.isInstance(retVal)) {
            Session session = ((EntityManager) retVal).unwrap(Session.class);
            session.enableFilter("filter").setParameter("user","admin");//get from security context holder 
        }
    }

}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37970140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档