Feaxer
@Feaxer
Программист-фрилансер

Spring Data Rest. Как заставить выводить categoryId для связи OneToMany при запросе GET_ONE?

Код на котлине:
@Entity data class Page(
        val name: String, 
        @OneToMany val category: Category, 
        @Id @GeneratedValue val id: Int = -1
)
@Entity data class Category(
        val name: String, 
        @Id @GeneratedValue val id: Int = -1
)
@RepositoryRestResource(collectionResourceRel = "pages", path="pages")
interface PageRepository : PagingAndSortingRepository<Page, Int>


При запросе "GET /pages/1" возвращает json с тремя полями: name, id(exposeIdsFor используется) и _links. В базе при "ddl-auto=create" используется поле category_id для данной связи. Как вывести это поле рядом с name и id при запросе? Что-нибудь типа "exposeIdsFor" только для связей, а еще лучше вычисляемое поле, как в projection через @Value
Пробовал использовать projection, но как я понял она работает только при тех запросах, где _embedded возвращается(т.е. не при GET_ONE). Да и все равно костыль получается, писать интерфейс с дублированием всех полей из Entity ради добавления одного поля как-то не очень привлекательно звучит, но если это единственный вариант, то почему бы и нет. Может есть способ, как projection распространить на GET_ONE и остальные запросы без _embedded?
@Value("#{target.category?.id}")
fun getCategoryId(): Int
  • Вопрос задан
  • 177 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы