java 代码
- public Tb_newsPO saveOrUpdateTb_news(Tb_newsPO tb_news) throws Exception {
- Transaction tx = null;
- try {
- Session s = HibernateSessionFactory.currentSession();
- tx = (Transaction) s.beginTransaction();
- if (tb_news.getId() == null) {
- //初始化clob
- oracle.sql.CLOB clob = oracle.sql.CLOB.empty_lob();
- tb_news.setContents(clob);
- // tb_bbs.setContents(Hibernate.createClob(""));
- s.save(tb_news);
- s.flush();
- // 此处一定要用lockMode.UPGRADE模式进行锁定刷新
- s.refresh(tb_news, LockMode.UPGRADE);
- //获取Tb_newsPO实体的ContentsString属性值
- String content = tb_news.getContentsString();
- //将获取的辅助字段的值通过oracle.sql.CLOB的putString()方法赋 值给实体内的Contents字段
- clob = (oracle.sql.CLOB) tb_news.getContents();
- clob.putString(1,content);
- s.update(tb_news);
- } else {
- // 首先通过锁模式把该实体读出来
- Tb_newsPO tb_newsold = (Tb_newsPO) s.load(Tb_newsPO.class, tb_news.getId(),LockMode.UPGRADE);
- // 获取辅助字段的值
- String contentsStringnew = tb_news.getContentsString();
- System.out.println("contentsStringnew=========="+contentsStringnew);
- // 更新前首先要清空原clob字段的内容
- oracle.sql.CLOB clob_empty = oracle.sql.CLOB.empty_lob();
- tb_newsold.setContents(clob_empty);
- // 必须要执行以下两步,否则将抛出“不能对空clob进行读写操作”的异常
- s.flush();
- s.refresh(tb_newsold, LockMode.UPGRADE);
- // 将获取的辅助字段的值通过oracle.sql.CLOB的putString()方法赋 值给实体内的summaryClob字段
- oracle.sql.CLOB clob = (oracle.sql.CLOB) tb_newsold.getContents();
- clob.putString(1, contentsStringnew);
- s.update(tb_newsold);
- }
- s.flush();
- tx.commit();
- } catch (Exception e) {
- tx.rollback();
- // e.printStackTrace();
- throw new HibernateException(
- "Tb_newsDaoHibernate saveOrUpdateTb_news error!" + e);
- }
- return tb_news;
- }