我想使用Spring MVC和Hibernate在PostgresQL中存储一个实体(字符串+图像)这是我的表。图像应该是oid的类型。
CREATE TABLE document ( name character varying(200), id serial NOT NULL, content oid, // that should be the image CONSTRAINT document_pkey PRIMARY KEY (id ) ) WITH ( OIDS=FALSE );
这是我要存储的实体。
@Entity @Table(name = "document") public class Document { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id; @Column(name = "name") private String name; @Column(name="content") private Blob content; //this is the image //getters- setters
您可以看到变量“名称”是一个字符串,而不是Long。仍然当我提交具有非数字值的表单时,它将引发 org.postgresql.util.PSQLException: Bad value for type long : x
org.postgresql.util.PSQLException: Bad value for type long : x
形式如下:
<form:form method="post" action="save.html" commandName="document" enctype="multipart/form-data"> <form:errors path="*" cssClass="error"/> <table> <tr> <td><form:label path="name">Name</form:label></td> <td><form:input path="name" /></td> </tr> <tr> <td><form:label path="content">Document</form:label></td> <td><input type="file" name="file" id="file"></input></td> </tr> <tr> <td colspan="2"> <input type="submit" value="Add Document"/> </td> </tr> </table> </form:form>
如果我输入一个数字值并提交,请确定。但是任何非数字值都会触发上述异常…我读到它可能是由于我没有正确使用OID引起的,但是我不知道应该怎么做才能消除此异常。实际上,我也不理解该专有名词的名称。它说“类型 长的 值不好”。但是谁想要长键入? 变量“名称”是字符串类型!
最后,这是控制器
@RequestMapping(value = "/save", method = RequestMethod.POST) public String save(@ModelAttribute("document") Document document, @RequestParam("file") MultipartFile file) { try { Blob blob = Hibernate.createBlob(file.getInputStream()); document.setContent(blob); documentDao.save(document); } catch (Exception e) { e.printStackTrace(); } return "redirect:/index.html"; }
任何建议都适用。
当我创建表时,列“名称”恰好是第一列。这不好。ID必须是第一列。如果我更改列的顺序,则可以正常工作…