java – Spring数据REST加入继承问题

我在一个JPA实体上有一个 Spring数据库.该实体通过连接继承进行子类化.

至少自动地,Spring Data REST似乎有一个解释这个结构的问题.或者也许我误会了Inheritance.JOINED的用法

任何有事件的实体的请求都将返回以下内容

{
    cause: null,message: "Cannot create self link for class com.foo.event.SubEvent! No persistent entity found!"
}

也许我问这个项目太多了解如何处理这个问题,但是有没有一个解决办法可以将所有的事件分组在同一个事件下?也许甚至允许我过滤类型?

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

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;
    ...
}

SubEvent.java

@Entity
public class SubEvent extends Event {
    private String code;
    ...
}

EventRepository.java

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

解决方法

我想你没有使用Discriminator来让JPA了解给定对象使用什么子类(它如何知道?).

我倾向于使用抽象类来表示每个子类的hireachies,所以这里是一个适合你的例子:

Event.java

@Entity
@DiscriminatorColumn(name = "type")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Event {
    @Id
    @GeneratedValue
    public Long id;

    public String type;
}

SubEvent.java

@Entity
@DiscriminatorValue("subevent")
@PrimaryKeyJoinColumn(name = "event_id")
public class PeeringService extends Service {
    private String code;
}

使用上面的代码,你会注意到一些奇怪的东西 – 当生成这些对象之一的资源路径时,它假设你有一个Repository为每个子类,并生成如下所示:

{
  "type" : "subevent","code" : "bacon","_links" : {
    "self" : {
      "href" : "http://localhost:8081/subEvents/1"
    },"peeringService" : {
      "href" : "http://localhost:8081/subEvents/1"
    }
  }
}

这很容易解决,但您只需要添加以下注释到您的基类:

@RestResource(path = "events")

它会生成您期望的资源路径!

希望这可以帮助 :)

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写:&#160;一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...