Отображение 2 таблиц с одинаковой структурой в Hibernate - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть приложение с сущностью, например Employee (Таблица EMP), и оно используется в нескольких местах.Теперь спустя долгое время создается реплика (EMP_ARC) для таблицы EMP, и мы должны ссылаться на нее в определенных сценариях.

Поскольку структура таблицы точно такая же, я подумал о повторном использовании объявления POJO.Но я не смог найти способ повторно использовать один и тот же POJO для двух разных объявлений таблиц.(Я видел примеры сопоставления XML для сопоставления одного POJO с несколькими таблицами, но наше приложение использует аннотации и не может найти такую ​​опцию с аннотацией)

Я не могу использовать стратегию наследования, потому что полиморфные запросы снижают производительностьприложение и таблица EMP_ARC должны указываться только при необходимости.

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

**Sample Code:**

Table structure for EMP and EMP_ARC (exactly same structure)
EMP_ID LONG
EMP_NAME VARCHAR2(100)

**Existing Java Bean mapped to EMP**
**This entity bean cannot be modified**
//getter and setters omitted

@Entity
@Table(name="EMP")
public class Employee{

  @Id
  @Column(name="EMP_ID") 
  Long empid;

  @Column(name="EMP_NAME")
  String empName;
}

//Scenario 1 Query EMP table
String hql = "from Employee";

//Scenario 2 Query EMP_ARC table -- Like SELECT * FROM EMP_ARC
//Not sure of how to write the HQL using the same Employee POJO.
//Output of this HQL has to be an Employee POJO.

Я хочу сопоставить то же POJO сотрудника с таблицей EMP_ARC, но не могу найти способ.

В качестве альтернативы, если я смогу выборочно включить / отключить полиморфные запросы, я смогу использовать Наследование со стратегией TABLE_PER_CLASS.

--- Обходной путь ---

Чтобы динамически включать или отключать полиморфные запросы, я использую две разные фабрики сессий.

  • У меня есть два POJO Employee и EmployeeArc (наследующий Employee).
  • Используется стратегия наследования TABLE_PER_CLASS.
  • Одна фабрика сессий будет ссылаться только на сущность Employee, а другая фабрика сессий будет иметь сущности Employee и EmployeeArc.
  • Когда функция полиморфного запроса не требуется, я буду использовать первую сессиюЗаводской, в противном случае используйте второй.

Если кто-нибудь знает о лучшем решении, пожалуйста, помогите мне решить его лучше.

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете пойти с унаследованными классами / сущностями.Поскольку я не знаю точного варианта использования, я бы посоветовал вам проверить эти ключевые слова-аннотации:

  1. @ MappedSuperclass
  2. @ Наследование

Вотобъяснение их различий: @ MappedSuperclass и @ Inheritance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...