JDK 1.6x,Hibernate 3.2.7,Oracle 10g(ojdbc14.jar)
我有一个包含clob的(实体)类。通过RESTful调用,我传递了一个字符串,它将是clob的内容。我无法将字符串填充到clob中以便以后持久化。这是班级......
public class MyClass implements java.io.Serializable {
private static final long serialVersionUID = 5507279748316866736L;
private long id;
private String name;
private String description;
private java.sql.Clob featuresJson;
...etc...
这是反序列化代码......
try {
String jsonStr = msoNode.path("features_json").getTextValue();
SerialClob clob = new SerialClob(jsonStr.toCharArray());
mso.setFeaturesJson(clob);
} catch (Exception e) {
log.error("MyClassDeserializer.deserialize(): Exception deserializing the features JSON." + e.getMessage());
}
反序列化后,我进入Dao的合并声明......
MyClass savedOverlay = myClassDao.merge(overlay);
其中“overlay”是反序列化的“MyClass”实例。在这一点上,我可以窥视clob并查看数据 - 但是返回的实例将clob字段无效,并且数据库中的clob列也为空!
我的反序列化代码出了什么问题?我尝试过其他一些事情,但每次都会失败(至少这是一致的!)
答案 0 :(得分:1)
解决!
需要在列上指定注释@Lob。同样被反向设计为java.sql.Clob类型的列需要更改为String。