gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:58:57 29 4
gpt4 key购买 nike

我正在使用 Spring Boot、Hibernate 和 JPA 存储库来搜索数据。 我想通过登录用户的上下文来过滤搜索结果。例如。查找返回登录用户拥有的所有实体的方法?我有许多用于过滤的 JPA 方法,但我不想使用附加约束来编辑所有这些方法。可以动态实现吗?

最佳答案

您可以像这样为 session 创建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
}
}

}

关于spring - JpaRepository 通过登录的用户上下文查找实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37970140/

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