Подтвердить что ты не робот

Как сопоставить один класс с разными таблицами, используя аннотации hibernate/jpa

В настоящее время я застрял в том, что кажется очень простой проблемой, но я просто не могу найти способ:

У меня есть 2 идентичные таблицы:

  • tbl_creditcard_approved_txns
  • tbl_creditcard_declined_txns

Поля в обоих одинаковы, и у меня есть один класс - Transaction, который используется для представления всех соответствующих полей в таблицах.

Я пытаюсь сопоставить два разных объекта (по одному для каждой таблицы) с указанным выше классом. В старом мире я бы создал два файла hbm.xml, по одному для каждой таблицы, и сопоставил их оба с Transaction. Затем я использовал имя сущности во время персистентности, чтобы гарантировать сохранение объекта в правильной таблице в зависимости от обстоятельств.

Я пытаюсь использовать аннотации в настоящее время для достижения того же, но пока не повезло в сопоставлении двух объектов с классом single. Это вообще возможно?

В настоящее время я использую другой подход, поскольку я извлек все общие поля (идентичные имена столбцов) в @MappedSuperClass и создал два отдельных класса (по одному для каждого объекта), которые простираются от суперкласса ( эти классы имеют только те же поля с разными именами столбцов, где это применимо).

4b9b3361

Ответ 1

Используя @MappedSuperclass, вы будете действовать следующим образом:

@MappedSuperclass
public class Transaction ...

@Entity
@Table(name="tbl_creditcard_approved_txns")
public class DeclinedTransaction extends Transaction ...

@Entity
@Table(name="tbl_creditcard_declined_txns")
public class ApprovedTransaction extends Transaction ...

Используйте @AttributeOverride для переопределения имен столбцов между двумя типами объектов транзакций, если это необходимо.

Обновление: я вижу, что вы хотите сопоставить одну @Entity с двумя таблицами в том же EntityManagerFactory... Я не думаю, что вы можете это сделать.

Ответ 2

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

Вероятно, это путь общего правила, чем более интеллектуальное разделение, тем быстрее ваши запросы могут быть.

Ответ 3

Вы должны использовать две разные единицы сохранения или два отдельных объекта. На это уже был дан ответ здесь.