Spring Data Rest中嵌入式实体的链接

时间:2015-01-16 10:59:13

标签: spring rest spring-boot spring-data-jpa spring-data-rest

我的项目中定义了以下实体:

国家

@Entity
@Data
public class Country {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;

    @Column(nullable = false)
    String name;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    List<City> cities = new ArrayList<City>();

}

城市

@Entity
@Data
public class City {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;
    @Column(nullable = false)
    String name;
    @ManyToOne
    Country country;
}

@Entity
@Data
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Long id;
    @Column
    String name;
    @Embedded
    Address address = new Address();
}

地址

@Data
public class Address {
    @Column
    String line;
    @ManyToOne
    Country country;
    @ManyToOne
    City city;
}

我还为PersonCountryCity定义了存储库。

当我向/ persons / 1发出GET请求时,我得到以下结果:

{
   "name":null,
   "address":{
      "line":"Address1"
   },
   "_links":{
      "self":{
         "href":"http://localhost:8080/persons/1"
      },
      "city":{
         "href":"http://localhost:8080/persons/1/city"
      },
      "country":{
         "href":"http://localhost:8080/persons/1/country"
      }
   }
}

我怀疑由于地址是嵌入式对象,因此生成的国家和城市链接是错误的。尽管存在citycountry值,但他们不会返回任何内容。正确的链接应该是什么?

Spring Data Rest不支持嵌入对象吗?

1 个答案:

答案 0 :(得分:2)

可能的解决方案:

  • 将关联移至父实体
  • 将embeddable推广到单独的实体资源
  • 添加ResourceProcessor以删除这些链接
  • 添加自定义控制器以处理这些链接

更新:这似乎已经在Spring-DATA-REST v2.1中得到修复。请参阅DATAREST-262