2010-07-10 189 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