Используйте переменную в JPA Annotation для имени таблицы

У меня есть база данных с таблицами, создаваемыми динамически (эти таблицы имеют одинаковую структуру, но к их имени добавляется год, за которым следует номер текущего месяца: data201201, data201202, data201203 ...) Я создал класс сущности с именем Data, который определяет структуру этих таблиц. Я не знаю, как сделать динамическое его использование. Пожалуйста, я хочу, чтобы вы мне помогли! Спасибо!

3 ответа

Это невозможно без создания класса для каждой таблицы, но это будет так же плохо, как иметь таблицу на каждый месяц. Лучший совет - нормализовать вашу схему, храня всю информацию в одной таблице, имеющей year и month колонка.

Для этого вы можете использовать динамическую сущность EclipseLink или многопользовательскую таблицу для каждой поддержки арендатора.

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_multitenant.htm

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

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

Невозможно изменить отображение во время выполнения. В вашем случае вы можете объединить все свои таблицы в одну и использовать комбинацию @Inheritance и @DiscriminatorColumn

РЕДАКТИРОВАТЬ

ты комбинированный стол

GLOBAL_DATE_TABLE
{
number : ID
varchar : MONTH <- this will be discriminator column
varchar : NAME
... all another fields
}

ваше отображение

@Entity
@Table(name="GLOBAL_DATE_TABLE")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(name="MONTH", discriminatorType=STRING)
public class Date 
{ 
   @Column(name = "ID")
   @Id 
   private long id;   

   @Column(name = "NAME")
   private String name;

   // another fields
}

@Entity
@DiscriminatorValue("data201201")
public class Data201201
{
   // if column MONTH contains value "ata201201" this instance will be created
   // logic for this table here   
}

@Entity
@DiscriminatorValue("data201202")
public class Data201202
{
   // if column MONTH contains value "ata201202" this instance will be created
   // logic for this table here    
}

@Entity
@DiscriminatorValue("data201203")
public class Data201203
{
   // if column MONTH contains value "ata201203" this instance will be created
   // logic for this table here     
}
Другие вопросы по тегам