终于搞定关于Hibernte的Blob更新操作
看了N多的文档,都是一样的,不理解,完全是网络转载,一点不负责任.所以我把我的完整代码贴如下:
sql: ============================================create table T_ZP
(
ID NUMBER not null,
RYBH VARCHAR2(21),
ZPXH NUMBER,
PIC BLOB,
OPTIME DATE not null,
DELFLAG CHAR(1) not null
)
============================================
bea和hbm.xml就不用写了吧!先看DAO方法:
package com.sclh.hibernate.dao;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import oracle.sql.BLOB;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.lob.SerializableBlob;
import com.sclh.common.GetTime;
import com.sclh.hibernate.bean.Zp;
/**
* Data access object (DAO) for domain model class Zp.
*
* @see .Zp
* @author MyEclipse - Hibernate Tools
*/
public class ZpDAO extends BaseHibernateDAO {
private static final Log log = LogFactory.getLog(ZpDAO.class);
public void delete(Zp persistentInstance) {
log.debug("deleting Zp instance");
try {
getSession().delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) {
log.error("delete failed", re);
throw re;
}
}
public boolean saveZp(Zp entity, String filePath) throws IOException {
log.debug("saveZp " + entity.getClass().getName() + " instance");
boolean opFlag = false;
String idFlag = "";
InputStream in = null;
Session session = null;
Transaction tx = null;
Integer id = null;
try {
session = getSession();
Zp zp = new Zp();
Zp zp1 = new Zp();
/* id的判断 */
Query query = session.createQuery("from Zp where delflag ='1'");
Iterator iterator = query.iterate();
while (iterator.hasNext()) {
zp1 = (Zp) iterator.next();
System.out.println("while ->照片Rybh:" + zp.getRybh());
if (entity.getRybh().equals(zp1.getRybh())
&& entity.getZpxh().equals(zp1.getZpxh())) {
idFlag = "1";
System.out.println("该人员有原始相片!");
update(entity, filePath);
break;
}
}
if (idFlag.equals("")) {
save(entity, filePath);
}
} finally {
session.close();
}
return opFlag;
}
public boolean save(Zp entity, String filePath) throws IOException {
boolean opFlag = false;
InputStream in = null;
Session session = null;
Transaction tx = null;
Integer id = null;
try {
session = getSession();
tx = session.beginTransaction();
Query query = session.createQuery("select max(zp.id) from Zp zp");
List zpList = query.list();
Iterator iterator = query.iterate();
Integer integerId = (Integer) iterator.next();
System.out.println("id:" + integerId.toString());
int intId = (integerId.intValue()) + 1;
entity.setId(new Integer(intId));
System.out.println("照片id:" + entity.getId());
entity.setRybh(entity.getRybh());
entity.setPic(Hibernate.createBlob(new byte[1]));
entity.setZpxh(entity.getZpxh());
entity.setOptime(GetTime.getSystemTime());
entity.setDelflag("1");
session.save(entity);
session.flush();
session.refresh(entity, LockMode.UPGRADE);
SerializableBlob blob = (SerializableBlob) entity.getPic();
java.sql.Blob wrapBlob = blob.getWrappedBlob();
BLOB tmpBlob = (BLOB) wrapBlob;
OutputStream out = tmpBlob.getBinaryOutputStream();
FileInputStream image = new FileInputStream(filePath);
byte[] buf = new byte[1024000];
int len = 0;
while ((len = image.read(buf)) > 0) {
(out).write(buf, 0, len);
}
image.close();
out.close();
Zp zp2 = (Zp) session.load(Zp.class, entity.getId());
session.flush();
tx.commit();
} catch (HibernateException e) {
throw e;
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage());
} finally {
if (tx != null) {
tx.rollback();
}
session.close();
}
return opFlag;
}
public boolean update(Zp entity, String filePath) throws IOException {
boolean opFlag = false;
String idFlag = "";
InputStream in = null;
Session session = null;
Transaction tx = null;
Integer id = null;
try {
session = getSession();
tx = session.beginTransaction();
Zp oldZp = (Zp) session.load(Zp.class, entity.getId(),
LockMode.UPGRADE);
oracle.sql.BLOB blob_empty = oracle.sql.BLOB.empty_lob();
oldZp.setPic(blob_empty);
session.flush();
session.refresh(oldZp, LockMode.UPGRADE);
oldZp.setId(new Integer(3));
oldZp.setRybh(entity.getRybh());
oldZp.setPic(Hibernate.createBlob(new byte[1]));
oldZp.setZpxh(entity.getZpxh());
oldZp.setOptime(GetTime.getSystemTime());
oldZp.setDelflag("1");
session.update(oldZp);
session.flush();
session.refresh(oldZp, LockMode.UPGRADE);
SerializableBlob blob = (SerializableBlob) oldZp.getPic();
java.sql.Blob wrapBlob = blob.getWrappedBlob();
BLOB tmpBlob = (BLOB) wrapBlob;
OutputStream out = tmpBlob.getBinaryOutputStream();
FileInputStream image = new FileInputStream(filePath);
byte[] buf = new byte[1024000];
int len = 0;
while ((len = image.read(buf)) > 0) {
(out).write(buf, 0, len);
}
image.close();
out.close();
Zp zp2 = (Zp) session.load(Zp.class, oldZp.getId());
session.flush();
tx.commit();
} catch (HibernateException e) {
throw e;
} catch (SQLException e) {
e.printStackTrace();
log.error(e.getMessage());
} finally {
if (tx != null) {
tx.rollback();
}
session.close();
}
return opFlag;
}
}


浙公网安备 33010602011771号