看了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; } }
方法的使用说明,我研究准确了,再附上!