2010-03-04 2 views
7

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

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

@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 { 
} 

ответ

1

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

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

+1

Спасибо за понимание. Раньше, когда у меня было это деловое требование с другими проектами, которые я использовал Spring JDBC, у меня просто был бы один класс и один сопоставитель строк для обеих таблиц. Я не делал этого раньше с спящим режимом, но вот пример http://old.nabble.com/Mapping-class-to-multiple-tables-with-entity-name-(hibernate-plugin)- to9547563.html <зимуют-отображение> <класс таблицы = имя "CLASS" = "some.my.Class"> (...) <имя-объект класса = "архивировать" таблица =» ARCHIVED_CLASS " name =" some.my.Class "> (...)

0

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

0

Моей мыслью было написать запрос, чтобы выбрать обе таблицы из db A и B. затем создать запрос с гибернацией и сопоставить его с вашим классом.

пример:

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

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

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