2017-02-18 13 views
0

Я пытаюсь создать слой данных Spring Boot поверх БД другого проекта. Я хочу добраться до точки, где я могу использовать их данные через Restful endpoints, а не напрямую из БД. Целью является максимальная абстракция. Вот моя проблема. Рассмотрим следующий объект JPA:Как смоделировать таблицы поиска JPA

@Entity 
@Table(name = "PERSON", schema = "public") 
public class Person { 
@Id private long id; 
private String name; 
private long favoriteFood; 
private Address address; 

//Getters, Setter etc..... 
} 

Обратите внимание, что favoriteFood является длинной, а не строкой. Это связано с тем, что БД использует таблицу поиска. Скажем, любимая еда Джо - пицца. Таблица лиц хранит 1 в столбце favorite_food, который является fk, на значение «pizza», хранящееся в таблице food_ref. Этот шаблон повторяется сотни или раз в БД. Каков наилучший способ моделирования этого в JPA/Hibernate? Измените переменную на String и попросите getter и setter выполнить поиск? Я не нашел примеров, которые кажутся странными. Это общая структура БД. Любые рекомендации по передовым методам будут оценены. Благодаря!

ответ

0

Лучший способ в этом случае является использование один к одному отношений в сущности JPA с классом FoodRef

@Entity 
@Table(name = "PERSON", schema = "public") 
public class Person { 
    @Id private long id; 
    private String name; 

    @OneToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="food_ref_id") 
    private FoodRef favoriteFood; 

    private Address address; 

    //Getters, Setter etc..... 
} 
+0

Я бросаю вызов 'выборки = FetchType, LAZY' атрибут в' @ OneToOne', если это специально не требуется в проекте по какой-либо причине. –

+0

Person to FoodRef - это, безусловно, отношения ManyToOne. –

Смежные вопросы