Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JpaRepository通过登录用户上下文查找实体_Spring_Hibernate_Jpa - Fatal编程技术网

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

Spring JpaRepository通过登录用户上下文查找实体,spring,hibernate,jpa,Spring,Hibernate,Jpa,我使用SpringBoot、Hibernate和JPA存储库来搜索数据。 我想按登录用户的上下文筛选搜索结果。 例如。 查找方法以返回登录用户拥有的所有实体?我有很多JPA过滤方法,我不想用额外的约束来编辑它们。可以动态执行吗?您可以像这样为会话创建hibernate筛选器和enableFilter /** * @author ali akbar azizkhani */ @Entity @Table(name = "post") @Getter @Setter @NoArgsConstru

我使用SpringBoot、Hibernate和JPA存储库来搜索数据。 我想按登录用户的上下文筛选搜索结果。 例如。
查找方法以返回登录用户拥有的所有实体?我有很多JPA过滤方法,我不想用额外的约束来编辑它们。可以动态执行吗?

您可以像这样为会话创建hibernate筛选器和enableFilter

/**
 * @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;

}

你花时间阅读了吗?参考这篇文章,它对我很有用。
@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 
        }
    }

}