Hibernate Аннотация для сущности существует более чем в 1 каталоге - PullRequest
7 голосов
/ 04 марта 2010

У меня есть сущность Person, сопоставленная Hibernate с таблицей базы данных в каталоге базы данных "Active". Через некоторое время записи в этой таблице базы данных в «Активном» каталоге архивируются / перемещаются в точную копию таблицы в каталоге базы данных «История». У меня есть необходимость извлекать из каталогов Active и History. Есть ли лучший способ смоделировать это с помощью аннотаций Hibernate, чем создание абстрактного класса, из которого расширяются 2 класса.

Это то, что у меня сейчас есть.

@MappedSuperclass
public abstract class Person  {

    @Id
    private Integer id;
    private String name;
}

@Entity
@Table(name="Person", catalog="Active")
public class PersonActive extends Person {
}

@Entity
@Table(name="Person", catalog="History")
public class PersonHistory extends Person {
}

Ответы [ 3 ]

1 голос
/ 04 марта 2010

Насколько мне известно, это был бы правильный способ сделать это с аннотациями (у вас есть две таблицы, поэтому вам нужно две сущности). Затем запустите полиморфный запрос к сущности Person. Кстати, я нахожу это довольно чистым.

PS: Можете ли вы добавить указатель на то, как сделать это с файлами сопоставления, мне действительно любопытно.

0 голосов
/ 10 мая 2011

Я бы подумал написать запрос для выбора обеих таблиц из db A и B., затем создать запрос с помощью hibernate и сопоставить его с вашим классом.

пример:

@Entity
@NamedNativeQuery(
name="GetAllPerson",
query="select * from A.Person inner join B.Person on A.Person.Id = B.Person.Id"
)
public class Person  {
...
}

Не уверен, что это сработает, ваш вопрос заставил меня также поинтересоваться, как лучше это сделать :). Я проверю это сегодня вечером после работы и посмотрю, хорошо ли это.

0 голосов
/ 10 мая 2011

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

...