2011-09-28 53 views
1

我想將多個複選框值存儲在單個數據庫列中。我不想在與@OneToMany分開的表中存儲。如何通過JDBC中的ResultSet#getString()獲得JPA持久化的String []列?

這是JPA實體:

@Entity 
@Table(name="COOK") 
... 
@Column(name="ARRAY_FOOD") 
private String[] arrayFood; 
...getter and setters... 

這裏是複選框值(JSF):

<h:selectManyCheckbox value="#{foodBean.selectedModel.arrayFood}" layout="lineDirection"> 
    <f:selectItem itemLabel="FISH"  itemValue="FISH"   /> 
    <f:selectItem itemLabel="SOUP"  itemValue="SOUP"   /> 
    <f:selectItem itemLabel="CAKE"  itemValue="CAKE"   /> 
    <f:selectItem itemLabel="1/2 WATER" itemValue="1/2 WATER"  /> 
    <f:selectItem itemLabel="BANANA 1KG" itemValue="BANANA 1KG"  /> 
</h:selectManyCheckbox> 

JPA商店提交的檢查值如下:

Column Name Data Type Sample Data 
---------------------------------------- 
ARRAY_FOOD RAW (255) ACED0005757200135B4C6A6176612E6C616E672E537472696E673BADD256E7E91D7B4702000078700000000174000141 

如何我可以通過ResultSet在另一個程序中獲得原始數組嗎?

String array = rs.getString("ARRAY_FOOD"); // ??????????? 

要不我怎麼能在像這樣在其他程序中,我可以像焦炭分裂成爲一個可以理解的格式來格式化它「;」 :

FISH;SOUP;BANANA 1KG 
+0

*我不想在一對多*一個單獨的表來存儲:你真的應該重新考慮這一點。否則,你最終會出現非規範化且難以使用的數據模型。 – BalusC

+0

謝謝@BalusC。原因是我有大量的數據,每個Cook實體都有至少10個Foods。該計劃應該很快,加入將影響表現。 我不能有一個'FOOD(在DB)'和'ARRAY_FOOD(不在DB)'列,它會以'X; Y; ​​Z;'的格式將其寫入'FOOD'並將其讀入數組' ARRAY_FOOD'。所以在JSF中,我將使用'ARRAY_FOOD',但是在寫入時它會寫入數據庫的'FOOD'列? – ahmet

回答