我使用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
答案 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?进行了一些讨论,你也应该看一下