gpt4 book ai didi

java - Crnk JsonApiRelation、OneToMany 和过滤实现

转载 作者:行者123 更新时间:2023-12-02 11:25:51 25 4
gpt4 key购买 nike

我在 java 项目中使用 crnk (JSON-API),关于它在 spring boot 和 jpa 中的使用,我有 3 个问题 - 尚未在文档中找到确切的实现细节。

  1. 例如,我有 2 个实体和各自的表:

    @Entity
    @JsonApiResource(type = "employee")
    public class Employee {
    @Id
    @JsonApiId
    private int id;

    private String name;

    @ManyToOne
    @JoinColumn(name = "typeId")
    private EmployeeType employeeType; //stored in table as typeId
    }

    @Entity
    @JsonApiResource(type = "type")
    public class EmployeeType {
    @Id
    @JsonApiId
    private int id;

    private String typeName;

    private int salary;
    }

应该如何引入 JsonApiRelation 才能调用“/employee/1”和“/employee/1/type”url?

  • 例如,还有一个实体。

    @Entity
    @JsonApiResource(type = "project")
    public class Project {
    @Id
    @JsonApiId
    private int id;

    private String supervisorName;

    private String projectName;
    }
  • 首先,我想要每个员工的项目列表,其中他是主管,按姓名联合并将其列为 Json 中的属性。

    尝试使用 @OneToMany 和 @JoinColumn 注释来实现它,但得到 StackOverflowException。这怎么能实现呢。其次,如何使用 Relation 来实现这一点?就像“/employee/1/projects”网址。

  • 我应该如何实现 findAll 方法结果的自定义过滤?例如,我有一个所有员工的列表,但我想从响应中排除其中一些。应该为此行为引入哪个类/方法?
  • 最佳答案

    1. @JsonApiRelation 注释不是必需的。 Crnk 将检测 @ManyToOne 注释并进行相应的映射。
    2. 对于 crnk-jpa,指定 JPA 中的所有关系就足够了。匹配 JSON API 关系。所以你的方法看起来不错。 StackoverflowException 堆栈跟踪是什么? (除了示例之外,crnk-jpa 中还有很多示例实体)
    3. 我会使用装饰器。请参阅http://www.crnk.io/documentation/#_request_filtering 。 RepositoryDe​​coratorFactory 允许在调用者和 crnk-jpa (或任何其他类型的存储库)之间放置自定义存储库。在那里,您可以(也许)调用“真实”存储库进行任何类型的修改。 => 将为此添加一个示例

    也请随意在 crnk 中打开票证以获取任何文档/示例说明。

    关于java - Crnk JsonApiRelation、OneToMany 和过滤实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49639922/

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