0

У меня есть вопрос для моего проекта в Spring Data REST.Spring Data REST конвертировать/показывать EmbeddedId, включая ManyToOne

Моя модель включает в себя две таблицы с EmbeddedIds. Первая таблица (name = B) состоит из двух целых чисел. Вторая таблица (name = A) состоит из простой FK и модели B (включая EmbeddedId).

Теперь, если я сделаю запрос для таблицы B, я получу два идентификатора. Однако, если я сделаю запрос для таблицы A, я не получу идентификаторы.

Поэтому я переуторил метод toString() в своем классе EmbeddedId, чтобы вернуть хотя бы ID в URI-ссылку ,

Я прочитал о BackendIdConverter или Spring core.converter и попытался преобразовать идентификаторы вправо, но я не смог достичь своей цели (получил ошибки). Так что теперь, мне нужна твоя помощь!

Чтобы полностью понять мою проблему, вот моя структура (как демо):

@Embeddable 
public class IDsFromA implements Serializable { 

    @ManyToOne 
    @JoinColumn(name="cID") 
    private C c; 

    @ManyToOne 
    @JoinColumns({ 
     @JoinColumn(name="b_1", referencedColumnName="b_1"), 
     @JoinColumn(name="b_2", referencedColumnName="b_2") 
    }) 
    private B b; 
} 

@Embeddable 
public class IDsFromB implements Serializable { 

    private int b_1; 
    private int b_2; 
} 

@Entity 
public class A { 

    @EmbeddedId 
    private IDsFromA idsFromA; 

    // ... 
} 

@Entity 
public class B { 

    @EmbeddedId 
    private IDsFromA idsFromA; 

    // ... 
} 

@Entity 
public class c { 

    @Id 
    private int cID; 

    // ... 
} 

ответ

0

Джексон JSON сериализатор по умолчанию также сериализовать любое публичное получить ..() методы. Поэтому вы можете просто добавить несколько методов для возврата соответствующих данных, и значения должны быть в ответе:

например.

@Entity 
public class A { 

    @EmbeddedId 
    private IDsFromA idsFromA; 

    public int getValueOne(){ 
     return idsFromA.getB().getIdsFromB().getB_1(); 
    } 

    public int getValueTwo(){ 
     return idsFromA.getB().getIdsFromB().getB_2(); 
    } 
} 
+1

Я решил проблему несколько часов назад, установив BackendIdConverter вправо. Но после того, как я спрятал конвертеры и попытался с вашим вариантом, я заметил, что идентификаторы уже показаны, поэтому я не могу проверить ваш ответ прямо сейчас, но сделаю это в другом проекте. Но спасибо за ваш ответ! – Phil

+0

@Phil, можете ли вы добавить свой ответ? –

+0

Я подталкиваю его к проекту github в ок. 5-6 часов. Ничего страшного? – Phil