7

У меня есть интересная проблема. Мои данные-модель заключается в следующем:Spring Data Serialization of Embeddable with ManyToOne Ссылки

Тип A:

@Entity 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class A { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
} 

Тип B:

@Entity 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class B { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 
} 

Встраиваемый C:

@Embeddable 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class C { 
    @ManyToOne 
    private A a; 
    @ManyToOne 
    private B b; 
} 

А Тип D:

@Entity 
@JsonIgnoreProperties(ignoreUnknown = true) 
public class D { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ElementCollection 
    @OrderColumn(name = "ORDER_INDEX") 
    @CollectionTable(
    name = "d_c_join", 
    joinColumns = @JoinColumn(name = "d_id") 
) 
    private List<C> listOfC; 
} 

Уничтожение (и хранение) объектов отлично работает. Когда объект класса D сериализации следующее результат:

{ 
    "_embedded" : { 
    "ds" : [ { 
     "id" : 1, 
     "listOfC" : [ { }, { } ], 
     "_links" : { 
     "self" : { 
      "href" : "http://localhost:8000/ds/1" 
     } 
     } 
    } ] 
    } 
} 

Как я могу настроить Spring-Data сериализовать А и В в С (лучше бы их URI).

+0

я думаю, вы просто отметьте поля на C как eagerload, верно? –

+0

никакие данные весны не будут смотреться на полях и ссылки на объект, не зависящие от него, будут нетерпеливыми или ленивыми. – Benny

+0

У меня такая же проблема. Отношения в объектах @Embeddable не сериализуются. Удалось ли вам решить эту проблему? –

ответ

3

Я довольно позитивный, что вы ищете, это Projections. Я не думаю, что Spring будет сериализовать ссылки на коллекции без него.

Смотрите мой ответ здесь для получения более подробной информации: Spring Data-Rest POST to sub-resource