我在Java项目中使用crnk(JSON-API),关于在Spring Boot和jpa中使用它的问题,我有3个问题-在文档中找不到确切的实现细节。
例如,我有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;
}
为了能够调用“ / employee / 1”和“ / employee / 1 / type” URL,应该如何引入JsonApiRelation?
例如,还有一个实体。
@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方法实现自定义结果过滤?例如,我有一个“所有雇员的列表”,但是我想从响应中排除其中一些。该行为应采用哪种类别/方法?
最佳答案
@JsonApiRelation注释不是必需的。 Crnk将检测@ManyToOne批注并进行相应映射。
如果是crnk-jpa,则在JPA中指定所有关系就足够了。匹配JSON API关系。因此,您的方法似乎不错。什么是StackoverflowException stacktrace? (在示例旁边,crnk-jpa中还有很多示例实体)
我会用一个装饰器。请参见http://www.crnk.io/documentation/#_request_filtering。 RepositoryDecoratorFactory允许在调用者和crnk-jpa之间放置自定义存储库(或任何其他类型的存储库)。在那里,您可以进行任何类型的修改,以执行(也许)调用“真实”存储库。 =>将为此添加一个示例
您还可以随意打开crnk的票证以获取任何文档/示例说明。