我有一个动态创建表的数据库(这些表具有相同的结构,但它们的名称后缀为年份,后跟当前月份的编号:data201201、data201202、data201203 ...)我创建了一个名为 Data 的实体类定义这些表的结构。我不知道如何动态地使用它。拜托,我希望你帮助我!谢谢!
问问题
3457 次
3 回答
1
您可以为此使用 EclipseLink 的动态实体或每个租户支持的多租户表。
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic
http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_multitenant.htm
此外,某些数据库(例如 Oracle)支持表分区,因此您不需要每月创建新的物理表。
您还可以定义一个从当前月份中选择的视图,以联合相关月份,并映射到该视图。
于 2012-11-20T14:35:03.920 回答
1
不为每个表创建一个类是不可能的,但这与每个月都有一个表一样糟糕。最好的建议是通过将所有信息存储在具有一个year
和一个month
列的单个表中来规范您的模式。
于 2012-11-19T19:19:54.867 回答
0
在运行时更改映射是不可能的。在您的情况下,您可以将所有表合并为一个,并使用@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
}
于 2012-11-19T20:11:14.350 回答