gpt4 book ai didi

java - 使用 spring 数据 JPA 返回子集/子模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:40 27 4
gpt4 key购买 nike

我正在使用 spring 框架构建 REST API,遇到了一个不太有趣的案例,我似乎找不到解决方案。

假设我们有包含列 Col1、Col2 和 Col3 的表 Table1我们有访问级别 1,2 和 3 的用户

访问级别为 3 的用户是唯一允许访问 Col3 以及所有其他列的用户,其余用户可以访问任何其他内容。

此外,我希望 API 能够根据调用返回字段的子集,即:如果对 URL/table/list?fl=col1 进行调用,则仅返回 Col1 的值.

我需要的是一种在 API 级别返回此特定数据子集的方法,显然 spring data JPA 不允许返回表的动态子集。

我想知道在不完全放弃 JPA 或不必重写所有实体中的所有函数的情况下,最简洁的方法是什么。

最佳答案

让我告诉你我的想法。

What i need to is a way to return this particular subset of the data on the API level, apparently spring data JPA doesn't allow returning a dynamic subset of the table.

这是不正确的,JPA 允许检索实体的某些部分,当您在 @Query 方法的查询中选择特定列时不需要返回完整的实体,因为您使用的是 jpql 或 native 查询,您应该只返回实体和spring数据的一部分会自动返回List,阅读更多here

现在管理对方法的访问,我建议用 Spring Security 实现一些东西,它允许用 @PreAuthorize 注释一些方法

@PreAuthorize("hasRole('ROLE_USER')")
public void create(Contact contact);

which means that access will only be allowed for users with the role "ROLE_USER".

所以它会根据角色限制执行,所以我的建议是限制基于角色的访问,并有几个 spring jpa 方法根据角色只检索列的子集。

另一种选择是创建动态 jpql 并直接在 entityManager 中执行,这将使您可以使用 @SqlResultMapping 进行映射以直接获取实体而不是对象列表。

关于java - 使用 spring 数据 JPA 返回子集/子模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015013/

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