【发布时间】:2011-09-28 11:14:40
【问题描述】:
我想在单个 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"); // ???????????
或者我怎样才能像在其他程序中那样以可理解的格式对其进行格式化,我可以用“;”之类的字符来分割它:
FISH;SOUP;BANANA 1KG
【问题讨论】:
-
我不想与 OneToMany 存储在单独的表中:你真的应该重新考虑这一点。否则,您最终会得到一个非规范化且难以使用的数据模型。
-
感谢@BalusC。原因是我有大量数据,每个
CookEntity至少有10 个Foods。程序应该很快,加入会影响性能。我不能有一个列FOOD (in DB)和ARRAY_FOOD (Not in DB),它会以X;Y;Z;格式写入FOOD并将其读入数组ARRAY_FOOD。所以在 JSF 中我将使用ARRAY_FOOD但在写入时它会写入 DB 的FOOD列?