2015-04-15 4 views
0

Только что начал изучать ВЕСНА и JPA. Так что медведь со мной, пожалуйста.

Давайте предположим, что у меня есть две таблицыРекомендации - SPRING JPA JoinColumns

 
EMPLOYEE TABLE     ATTACHMENT TABLE 
---------------------------  ------------------------------------------- 
ID | FIRSTNAME | LASTNAME |  ID | REF_TYPE | REF_ID | FILE 
---------------------------  ------------------------------------------- 
1 | EMP1  | EMPL1 |  1 | "EMPLOYEE" | 1  | EMPL1_FIle1.jpg 
---------------------------  ------------------------------------------- 
2 | EMP2  | EMPL2 |  2 | "EMPLOYEE" | 1  | EMPL1_FIle2.jpg 
           ------------------------------------------- 
           3 | "EMPLOYEE" | 2  | EMPL2_FIle1.jpg 

** Для того, чтобы сохранить вложения гибкие (так что я могу использовать тот же стол/класс для других мест, где мне нужно вложения), я воспользуйтесь сочетанием REF_TYPE и REF_ID, чтобы найти объект ссылки.

Какой был бы лучший способ для этого?
- Должно быть, это так? Есть ли лучший подход к дизайну DB/Class?

- Должен ли я использовать @JoinColumns? (Но я не уверен, как это будет работать ...)

- Или логика для загрузки вложений переходит в класс Service/DAO с функцией findByRefTypeAndRefId (String refType, long refId), возвращающейся обратно в JPARepository @Autowired интерфейс?

ответ

0

Вы не сможете сопоставить такое отношение в JPA.

Отображения OneToMany или ManyToOne (от Employee to Attachment или Attachment to Employee) основаны на @ID. У вашего сотрудника есть простой идентификатор столбца, но в вашем присоединении вложений зависит значение двух столбцов.

0

Предполагая, что таблица вашего приложения будет иметь записи из другой таблицы, включая Employee, например. компания и т. д.

Во-первых, вам нужно будет написать запрос JPA, @JoinColumns не будет работать, так как вы не должны сопоставлять отображение одного столбца на две таблицы как отношения между первичными.

Логика для загрузки любых запросов db всегда должна идти в класс DAO. и вы должны следовать, сервисные и DAO-шаблоны для упрощения кода.

Решение1: Если вы хотите использовать текущий подход, используйте запрос JPA + ваш тип столбца REF_TYPE как CHAR (1), например. E, C и т. Д.

Решение2: Сделайте отдельные таблицы для прикрепления (пользователей, компании и т. Д.), Удалите столбец REF_TYPE. создайте внешнее первичное отношение между столбцом id и используйте соединение. Это заставит ваш код также выглядеть аккуратно.

Надеюсь, что это поможет.