2010-07-10 151 views
2

我进口使用的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 

我已经叫股票

@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

回答

2

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

然后要么引入一个继承层次结构(带连接或TABLE_PER_CLASS战略),并坚持适当的子类型或许我们(这需要一些测试,但我从来没有用MySQL和Hibernate来完成)。

1

而不必为每一个自定义类,我不知道一个简单的方法来适当地做这些表。

话虽如此,我会鼓励你重新考虑你的设计,并考虑更好的面向对象的概念的使用。

例如,假设你保持你的股票对象/台,但随后有另一个物体,例如其中载有日期,开盘价,最高价,最低价,收盘价,DailyActivity组件等

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

然后,如果你想评估如何MSFT也将成为一个相对琐碎查询从库存表中选择MSFT记录,选择其DailyActivity对象为指定的时间段。

+0

所以你建议一个大表来保持Stock对象。那里的数据是来自纳斯达克的分钟数据,而且这个数据表的大小很大,这就是为什么我需要为每只股票单独列出一张表。那里的人们会如何处理这些数据? – portoalet 2010-07-10 09:39:36

+0

数据在每分钟的基础上完成的事实并不像您所介绍的那样清楚。您所拥有的属性每日价值比周期性的盘中价值更多。你是在说每分钟更新一个价值区还是每分钟实际收集股票价格?如果是这样,你能否澄清你的数据模型? – apiri 2010-07-10 20:39:02

+0

我们基本上试图从csv文件导入分钟数据,所以这不是一个实时操作。 csv的每一行都有一个精确到分钟的日期时间分量(看上面,即2010年6月9日09:01)。最后,我们主要是读取数据库,很少写(读/写比率是10/1) – portoalet 2010-07-11 04:25:11