在Hibernate Annotation中,实体BLOB、CLOB类型的注解与普通的实体属性有些不同,具体操作如下:
BLOB类型的属性声明为byte[]或者java.sql.Blob:
@Lob
@Basic(fetch=FetchType.LAZY)
@Column(name="IMGS", columnDefinition="BLOB", nullable=true)
private byte[] imgs;
public byte[] getImgs() {
return this.imgs;
}
public void setImgs(byte[] imgs) {
this.imgs= imgs;
}
//下面的例子就是用的java.sql.Blob
@Lob
@Basic(fetch=FetchType.LAZY)
@Column(name="IMGS", columnDefinition="BLOB", nullable=true)
private Blob imgs;
public Blob getImgs() {
return this.imgs;
}
public void setImgs(Blob imgs) {
this.imgs= imgs;
}
CLOB类型的属性声明为String或java.sql.Clob即可:
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(name="REMARK", columnDefinition="CLOB", nullable=true)
private String remark;
public String getRemark() {
return this.remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(name="REMARK", columnDefinition="CLOB", nullable=true)
private Clob remark;
public Clob getRemark() {
return this.remark;
}
public void setRemark(Clob remark) {
this.remark = remark;
}
【注】:在Oracle数据库中byte[]和String存储的是二进制流文件,而Blob和Clob存储的是原文件,如果Clob字
符串中出现中文乱码情况,请检查数据库的编码是否支持中文。
上面是Oracle和DB2数据库的写法,如果是MySQL数据库写法如下:
@Lob
@Basic(fetch = FetchType.EAGER)
@Column(name="REMARK", columnDefinition="TEXT", nullable=true)
private String remark;
public String getRemark() {
return this.remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
--------------------------------------------------------------------------------------------------
也可直接把字段属性直接定义成Blob类型。
例如插入操作:
receiptSample_edit.jsp文件的部分代码片段:
<form method="post" name="theForm" id="theForm" action="" enctype="multipart/form-data">
<td height="20" align="right">请选择图片:</td>
<td align="left">
<input type="file" name="filename" id="filename" class="content"/>
</td>
</form>
receiptSample_edit.js文件的保存方法部分代码片段:
var imageName = $("#filename").val();
var img = imageName.lastIndexOf(".");
var imgNa = imageName.substring(img);
var imgfrom = imgNa.toLowerCase();
if (imageName != "") {
if (imgfrom != ".gif" && imgfrom != ".jpg" && imgfrom != ".bmp") {
alert("不支持的图片类型" + imgNa);
return;
}
}
$("#theForm").attr("action", "editReceiptSample.do");
$("#theForm").submit(); //注意是submit提交,不是ajax提交的
ReceiptSampleCtrl.java文件中的方法:
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@RequestMapping(value = "editReceiptSample.do")
private String editReceiptSample(HttpServletRequest request, ReceiptSampleVO rsVo) throws Exception {
Map parmMap = getParmMap(request);
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("filename");
receiptSampleService.saveEditReceipt(rsVo, getGfmisAllUserId(request), parmMap, file);
return "receiptsystem/receipttypemanage/receiptSample_list";
}
ReceiptSampleServiceImpl.java文件中的方法:
public void saveEditReceipt(ReceiptSampleVO rsVO, String userId, Map map, MultipartFile file) throws IOException{
ReceiptSample rs = receiptSampleDao.findUnique("select rs from ReceiptSample rs where rs.receiptSampleId = ?", new Object[]{Long.parseLong(receiptSampleId)});
if (file.getSize() != 0) {
rs.setImgContent(Hibernate.createBlob(file.getInputStream()));
rs.setImgUploadTime(new Date());
rs.setImgUploadUserId(Long.parseLong(userId));
}
receiptSampleDao.save(rs);
}
例如读取操作:
@Entity
@Table(name = "R_RECEIPT_SAMPLE", schema = "GFMIS_ALL")
public class ReceiptSample implements Serializable{
@Id
@Column(name = "RECEIPT_SAMPLE_ID")
@SequenceGenerator(name = "RECEIPT_SAMPLE_ID_GENERATOR", sequenceName = "GFMIS_ALL.SEQ_RECEIPT_SAMPLE_ID", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "RECEIPT_SAMPLE_ID_GENERATOR")
private Long receiptSampleId;
@Column(name = "IMG_CONTENT")
private Blob imgContent;
public Blob getImgContent() {
return imgContent;
}
public void setImgContent(Blob imgContent) {
this.imgContent = imgContent;
}
}
ReceiptSampleServiceImpl.java文件中的方法:
@Override
public Blob showImg(Long imageId, HttpServletResponse rep) throws Exception{
Blob imgCount;
imgCount = receiptSampleDao.get(imageId).getImgContent();
OutputStream output = null;
InputStream input = null;
try {
final String CONTENT_TYPE = "plain-text/txt;charset=" + "GB2312";
rep.reset();
rep.setContentType(CONTENT_TYPE);
BusinessException.throwWhenNull(imgCount,"该票据类型默认版本没有票样图片信息");
input = imgCount.getBinaryStream();
// rep.setHeader("Content-Disposition", "attachment;filename=" + filename + "");
// bos1.close();
output = rep.getOutputStream();
byte data[] = new byte[4096];
int size = input.read(data);
while (size != -1) {
output.write(data, 0, size);
size = input.read(data);
}
output.flush();
}finally {
try {
if (input != null)
input.close();
if (output != null)
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return imgCount;
}
ReceiptSampleCtrl.java文件中的方法:
@RequestMapping(value = "viewImg.do")
public String viewImg(HttpServletRequest request, HttpServletResponse rep) throws Exception {
Map parmMap = getParmMap(request);
String imgName = (String) parmMap.get("imageId");
Blob img = receiptSampleService.showImg(Long.parseLong(imgName), rep);
request.setAttribute("img", img);
return "receiptsystem/receipttypemanage/ReceiptSampleImg_show";
}
ReceiptSampleImg_show.jsp文件中的内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<%@include file="/receiptcommon/commonHead.jsp" %>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="Expires" CONTENT="0"/>
<meta http-equiv="Pragma" CONTENT="no-cache"/>
</head>
<body>
<table>
<tr>
<td>
<c:choose>
<c:when test="${img != null}">
${img}
</c:when>
<c:otherwise>
没有图片
</c:otherwise>
</c:choose>
</td>
</tr>
</table>
</body>
</html>
相关推荐
### Hibernate Annotation 使用手册详解 #### 一、概述 Hibernate 是一款非常流行的 ORM(Object Relational Mapping)框架,它能够简化 Java 应用程序与数据库之间的交互。为了更好地使用 Hibernate 进行开发,...
2. `cascade`属性:在关联注解中,如`@OneToMany`或`@ManyToOne`,可以设置`cascade`属性来控制级联操作,如级联保存、删除等。 八、其他注解 1. @Temporal:用于日期和时间类型的字段,指定存储类型(TIMESTAMP, ...
- 用于大对象类型,如 BLOB 和 CLOB。 9. **@Version** - 用于乐观锁机制。 10. **@Transient** - 表示某个属性不会被持久化到数据库。 #### 五、小结 通过上述示例,我们了解了如何使用 Hibernate 注解来...
而Hibernate Annotation则是Hibernate框架中的一个重要组成部分,它引入了注解来声明对象与数据库表之间的映射关系,使得代码更加简洁,易于理解和维护。本文将详细解析Hibernate Annotation的相关知识,旨在为使用...
在Hibernate中,实体是与数据库表相对应的Java类,而注解则是用来标记这些实体类及其属性,以便于Hibernate理解和管理它们。本篇文章将深入探讨Hibernate中的实体注解,包括其中英文含义,并提供一些实用的例子。 1...
这些注解用于标记Java实体类和它们的属性,以定义它们在数据库中的映射。例如,`@Entity`注解表示一个类是数据库表的映射,而@Table则指定对应的表名。`@Column`注解用于指定字段映射到表的列,可以设置列名、长度、...
- **@Lob**: 处理大数据类型,如BLOB(二进制大对象)和CLOB(字符大对象)。 4. **关联映射注解** - **@OneToOne**: 一对一关联,可以是单向或双向。 - **@OneToMany**: 一对多关联,通常需要配合`@JoinColumn`或...
#### 实体Bean - Hibernate独有的注解扩展 (Entity Beans - Hibernate Annotation Extensions) Hibernate提供了一系列特有的注解,如`@ManyToMany`、`@ManyToOne`等,用于处理一对多或多对多的关系映射。 #### ...
本资源主要关注的是Hibernate中的注解,包括中文版和英文版的文档,这对于我们理解并有效利用Hibernate进行数据库操作至关重要。 一、Hibernate注解简介 Hibernate注解是元数据的一种形式,它们允许我们在Java类和...
在Hibernate中,通过使用`@Entity`注解来标记某个Java类,使其成为实体Bean。 ```java @Entity public class Flight implements Serializable { private Long id; @Id public Long getId() { return id; } ...
以上只是Hibernate注解3.4.0.GA版中部分关键知识点的概述,实际应用中,开发者还需要根据项目需求灵活运用,并结合 Hibenate的其他特性,如HQL(Hibernate Query Language)、Criteria API等,构建高效稳定的持久层...
Hibernate 注解是 Hibernate ORM 框架中用于对象关系映射的一种方式,它允许开发者在 Java 类的属性上直接添加元数据,从而简化配置并减少 XML 映射文件的使用。下面将详细讲解 Hibernate 注解的相关知识点。 1. **...
- 存储CLOB/BLOB类型数据 - 自定义数据类型 - 使用Hibernate提供的类型 #### 四、ID生成策略 - **项目:hibernate_0400_ID** - 使用XML定义ID生成策略 - 注解方式通过`@GeneratedValue`指定ID生成规则 - ...
Hibernate Annotations是Hibernate 3.2引入的新特性,它允许开发者通过Java 5的注解(Annotation)来配置实体类,替代了传统的XML配置文件。这种方式使得代码更清晰,更易于维护,同时也提高了开发效率。3.4.0.GA...
在实现过程中,`Oracle字段映射动态`可能指的是针对Oracle数据库的特殊处理,例如Oracle的CLOB和BLOB类型映射,或者考虑Oracle特有的数据类型和特性。确保你的解决方案能适配不同的数据库系统,因为它们可能有不同的...
11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的...
11.3 BLOB/CLOB类型数据的操作 11.3.1 如何获取本地数据连接 11.3.2 相关的操作接口 11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的...
处理BLOB 和 CLOB对象 11.7.3. 在IN语句中传入一组参数值 11.7.4. 处理复杂类型的存储过程调用 12. 使用ORM工具进行数据访问 12.1. 简介 12.2. Hibernate 12.2.1. 资源管理 12.2.2. 在Spring容器中创建 ...