Spring Data REST加入了继承问题

bvu*_*laj 10 java jpa spring-data spring-data-rest

Repository在一个JPA实体上有一个Spring Data .该实体通过连接继承进行子类化.

Spring Data REST似乎在解释这个结构时遇到了问题,至少是自动解决.或者也许我误解了它的用法Inheritance.JOINED

对任何实体的任何请求都Event返回以下内容:

{
    cause: null,
    message: "Cannot create self link for class com.foo.event.SubEvent! No persistent entity found!"
}
Run Code Online (Sandbox Code Playgroud)

也许我要求太高了这个项目知道如何处理这个问题,但有一种变通方法,将组中的所有的我Events在相同的/events?也许甚至允许我过滤类型?

我已经离开了下面的应用程序结构的基础知识.

Event.java

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@JsonTypeInfo(use = Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({
  @Type(value = SubEvent.class), 
  ...
})
...
public class Event {
    @Id
    private long id;
    ...
}
Run Code Online (Sandbox Code Playgroud)

SubEvent.java

@Entity
public class SubEvent extends Event {
    private String code;
    ...
}
Run Code Online (Sandbox Code Playgroud)

EventRepository.java

@RepositoryRestResource(path = "events")
public interface EventRepository extends PagingAndSortingRepository<Event, Long> {
    ...    
}
Run Code Online (Sandbox Code Playgroud)

And*_*i I 0

我认为这个问题与JPA无关,而是一个循环序列化问题。由于您没有显示您的实体,我只能假设子事件实体与另一个(子)事件有关系,并且一个子事件引用自身,这会导致问题。当然,也有可能这种关系不是直接的,而是通过其他一些实体类,如 SubEvent -> EntityG -> Event。

要解决此问题,只需使用DTO,其中仅映射 SubEvent 的所有字段(除了那些产生循环依赖的字段)。