Hibernate模板中的动态表创建

时间:2010-07-10 03:57:49

标签: java mysql hibernate spring

我使用HibernateTemplate + SpringFramework

导入股票报价数据

数据格式

AAPL,09-Jun-2010 09:00,251.47,251.47,251.39,251.39,640
AAPL,09-Jun-2010 09:01,251.4,251.4,251.05,251.26,6844
INTC,09-Jun-2010 09:00,251.47,251.47,251.39,251.39,640
INTC,09-Jun-2010 09:01,251.4,251.4,251.05,251.26,6844
MSFT,09-Jun-2010 09:00,251.47,251.47,251.39,251.39,640
MSFT,09-Jun-2010 09:01,251.4,251.4,251.05,251.26,6844

我有一个名为Stock

的实体类
@Entity
public class Stock implements Serializable {
public Stock() {}

private Long id;
private BigDecimal open;
    .... close,high, low..etc
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
    ....

我对此设置的问题是,hibernate会将所有内容放入名为“Stock”的表中。

我想将不同的股票分成不同的表格,所以对于上面的数据,我最终会有3个表格(AAPL,MSFT,INTC)

有没有一种简单的方法可以在不使用Hibernate / HibernateTemplate中的手写sql语句的情况下执行此操作?有点动态创建表吗?

环境: - Mysql,Hibernate3.5.3,springframework3.0

3 个答案:

答案 0 :(得分:2)

  

我想将不同的股票分成不同的表格,所以对于上面的数据,我最终会有3个表格(AAPL,MSFT,INTC)

然后要么引入继承层次结构(使用JOINED或TABLE_PER_CLASS策略)并保留适当的子类型,要么使用horizontal partitioning(这需要进行一些测试,但我从未使用MySQL和Hibernate进行过测试)

答案 1 :(得分:1)

如果没有每个自定义类,我不知道一个简单的方法来适当地制作这些表。

话虽如此,我建议您重新考虑您的设计,并考虑使用更好的OO概念。

例如,假设你保留了你的Stock对象/表,但是有另一个对象,例如DailyActivity组件,其中包含日期,开放,高,低,关闭等。

然后,您可以将您的股票指定为具有DailyActivity对象的集合。然后,这可以通过Hibernate映射为Stock到DailyActivity,一对多的关系。

然后,如果您想评估MSFT的工作方式,那么从Stock表中选择MSFT记录将成为一个相对简单的查询,在指定的时间段内选择其DailyActivity对象。

答案 2 :(得分:0)

我不确定这是推荐的。 reference docs表示该属性名为hibernate.hbm2ddl.auto

我们之前在Hibernate: hbm2ddl.auto=update in production?Hibernate hbm2ddl.auto possible values and what they do?进行了一些讨论,你也应该看一下

相关问题