我想在PostgresQL中使用Spring MVC和休眠存儲一個實體(一個字符串+圖像) 這是我的表。圖像應該是oid的類型。類型長的不良值: - Postgresql,Hibernate,Spring
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
您可以看到變量「name」是一個字符串,不是長。不過,當我提交表單與值不是數字,它拋出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>
如果我輸入一個數值並提交,OK。但是任何非數字值都會觸發上述異常...我讀到它可能是由於我沒有正確使用OID而導致的,但我不知道應該如何消除此異常。其實我也不明白excpetion的名字。它說「類型長的價值不好」。但誰想要長型? 變量「name」是String類型的字符串!!!!
最後,這裏是控制器
@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";
}
任何建議是appriciated。
您可能想嘗試使用hibernate @Lob批註註釋您的Blob聲明。此外,它可能有助於打開hibernate的查詢輸出,以便您可以看到正在生成的sql,並查看它是否爲您提供了有關正在發送到數據庫的提示。 – jcern
@Lob 沒有幫助,對不起 –
OID不能容納BLOB。 [「oid類型當前是作爲一個無符號的四字節整數實現的。」](http://www.postgresql.org/docs/9.0/static/datatype-oid.html)。我想這就是錯誤來自的地方。 – madth3