如何在JDBC中使用ResultSet#getString()获取JPA持久的String []列?

时间:2011-09-28 11:14:41

标签: arrays jpa jdbc entity

我想在一个DB列中存储多个复选框值。我不想将@OneToMany存储在单独的表格中。

这是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");  // ???????????

或者我如何以可理解的格式对其进行格式化,就像在其他程序中一样,我可以用char来分割它,如“;” :

FISH;SOUP;BANANA 1KG

1 个答案:

答案 0 :(得分:0)

默认情况下,不受支持的可序列化类型数据库类型是序列化的。您需要使用Java序列化将这些类型恢复到JPA之外。

如果使用EclipseLink,您可以使用@Converter转换数组。

您也可以使用get / set方法转换值,参见

http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes#Conversion