我想使用SpringMVC和Hibernate在PostgresQL中存储一个实体(字符串+图像)
这是我的桌子。该图像应为oid类型
创建表格文档
(
名称字符变化(200),
序列号不为空,
内容oid,//应该是图像
约束文档\u pkey主键(id)
)
与(
OID=错误
);
这是我要存储的实体
@实体
@表(name=“document”)
公共类文档{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”)
私人长id;
@列(name=“name”)
私有字符串名称;
@列(name=“content”)
私有Blob内容;//这是图像
//接受者-接受者
您可以看到变量“name”是一个字符串,不长。但当我提交带有非数字值的表单时,它会抛出org.postgresql.util.psqleexception:Long:x类型的错误值
表格如下:
<;form:form-method=“post”action=“save.html”commandName=“document”enctype=“multipart/form-data”>;
<;form:errors path=“*”cssClass=“error”/>;
<;表格>;
<;tr>;
<;td>;<;表格:label path=“name”>;name<;/form:label>;<;/td>;
<;td>;lt;表单:输入路径=“名称”/>;lt;/td>;
<;/tr>;
<;tr>;
<;td>;lt;格式:label path=“content”文档<;/form:label>;lt;/td>;
<;td>;<;input type=“file”name=“file”id=“file”>;<;/input>;<;/td>;
<;/tr>;
<;tr>;
<;td colspan=“2”>;
<;输入type=“提交”value=“添加文档”/>;
<;/td>;
<;/tr>;
<;/table>;
<;/form:form>;
如果我输入一个数值并提交,好的。但任何非数值都会触发上述异常…我读到这可能是由于我没有正确使用OID造成的,但我不知道该如何消除此异常。事实上,我也不理解例外的名称。它说“typelong的值不正确”。但是谁想要type long呢?变量“name”是type String!!!!
最后,这里是控制器
@RequestMapping(value=“/save”,method=RequestMethod.POST)
公共字符串保存(@modeldattribute(“文档”)文档、@RequestParam(“文件”)多部分文件){
试一试{
Blob Blob=Hibernate.createBlob(file.getInputStream());
文件设置内容(blob);
documentDao.save(文档);
}捕获(例外e){
e、 printStackTrace();
}
返回“重定向:/index.html”;
}
任何建议都是值得的
我有一个类似的问题,但它与数据库中ID字段的顺序无关
经过一番搜索,我发现这一点指向这样一个事实:除非另有规定,否则Hibernate中的LOB被视为OID
这意味着Hibernate将尝试将Lob放入长a中,从而产生异常PSQLException:Long类型的坏值
指定Lob是要作为文本处理的对象的方法是通过注释字段
@Lob
@类型(Type=“org.hibernate.Type.TextType”)