0

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

  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?

  1. 例如,还有一个实体。

    @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”网址。

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

1 回答 1

1
  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 中为任何文档/示例说明开票。

于 2018-04-04T11:11:42.837 回答