网上关于如何处理oracle xmltype类型的博客很多,我现在分享的是针对具体业务来的,我在oracle数据库entity表中detail插入了一条xmltype类型的数据

xml的详细内容如下:

<Family>
<Person>
<name>Jack</name>
<phone>123</phone>
<address>
<company>常州</company>
<home>常州</home>
</address>
</Person>
<Person>
<name>Tom</name>
<phone>456</phone>
<address>
<company>无锡</company>
<home>无锡</home>
</address>
</Person>
<Person>
<name>Andy</name>
<phone>789</phone>
<address>
<company>苏州</company>
<home>苏州</home>
</address>
</Person>
</Family>

现在要实现的业务是在前端表格中显示相应数据

我想到了3种解决途径,后来花费了一天功夫,才解决了这个业务需求。

方案一、采用oracle通过Hibernate在java中映射的实体才操作

oracle xmltype类型继承clob大数据类型,通过Hibernate操作在java中映射的实体类型为string类型,再通过dao层去存取该实体。

这个时候就遇到问题了,将xml编辑为string类型后entity.setDetail(xml);sava(entity);数据中数据被更新了,没有问题,但是entity,getDetail()的时候获得的数据为null但是数据库却是有数据的。

在花费了一段时间之后,发现需要自己编写一个类去替换string,最后取出的类型是docoment类型,将document类型做处理就好了,以下附上相关的一些资料:

1、使用Hibernate4处理Oracle XmlType字段类型

2、解决:Weblogic容器、SSH框架下Hibernate映射Oracle XMLType方法与Jar包冲突

3、java中Document类使用方法

方案二、采用Hibernate连接写sql获取xmltype的值

String sql = "select en.detail as de from entity en where en.id = '123'";
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);

结果发现报错,javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2009

查资料没发现有效的解决方案,舍弃

方案三、使用oracle自带的处理xmltype的函数进行数据读取

Oracle 中XML处理函数介绍,附上函数资料,但是发现这样子取数据必须知道数据条数而且取很麻烦

在查询资料以后发现,对与获取相同标签下的数据的时候可以使用xmltable函数,附上sql语句:

select en.id, x.*
from entity en,xmltable('/Family/Person' passing en.detail columns name path 'name',
phone path 'phone') x
where ed.id = '123'

需要注意的问题是,使用这种方法的时候,如果节点下还有子节点,那么会报方案二的错误,暂时没有找到解决方案,要处理这种情况还是选择方案一吧。

暂时就想到这几种解决方案。

java Hibernate 处理 oracle xmltype类型的更多相关文章

  1. Hibernate写入Oracle Date类型处理

    Hibernate写入Oracle数据库时,数据库设计字段为Date类型时,只能保存年月日,不能保存时分秒,如果要保存时分秒,需修改Hibernate.cfg.xml文件 <property n ...

  2. java plsql 调用oracle数组类型

    首先当然是在oracle中建立type CREATE OR REPLACE TYPE cux_proxy_bid_award_rec IS OBJECT ( trading_partner_id NU ...

  3. hibernate中java类的成员变量类型如何映射到SQL中的数据类型变化

    hibernate映射文件??.hbm.xml配置映射元素详解--Hibernate映射类型 在从Hibernate的java的成员类型映射到SQL中的数据类型,其内映射方式它满足,SQL可以自己调制 ...

  4. java 实现往oracle存储过程中传递array数组类型的参数

    注:本文来源于 <  java 实现往oracle存储过程中传递array数组类型的参数  >最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码 ...

  5. oracle xmltype导入并解析Excel数据--前言

    通常,很多的时候,我们需要导入Excel数据到系统中,但是Excel数据需要我们去各种校验,比如身份证校验,手机号码校验等等. 校验失败的数据,提供Excel导出错误原因,提示给用户. 如此,如果校验 ...

  6. oracle xmltype导入并解析Excel数据 (三)解析Excel数据

    包声明 create or replace package PKG_EXCEL_UTILS is -- Author: zkongbai-- Create at: 2016-07-06-- Actio ...

  7. oracle ORA-01747(系统保留关键字)user.table.column, table.column 或列说明无效 hibernate映射oracle保留关键字

    1.查询系统关键 select * from v$reserved_words 确认你使用的是否为关键字: select * from v$reserved_words w where w.KEYWO ...

  8. oracle字段类型

    oracle 字段类型CHAR    固定长度字符串    最大长度2000    bytes              VARCHAR2    可变长度的字符串    最大长度4000    byt ...

  9. Hibernate遇到oracle之主键生成策略

    一直用Hibernate+mysql,感觉Hibernate很好用,也出过什么大问题:这周,公司的产品要部署到Orecle,虽然产品号称支持Oracle但是我自己知道,这个产品压根儿就没在Oracle ...

随机推荐

  1. route路由的顺序问题了数据包的转发流程

    2018-02-28   15:29:26 [root@linux ~]# routeKernel IP routing tableDestination     Gateway           ...

  2. Open source operational tools

    操作系统:Centos,Ubuntu,Redhat,suse,Freebsd 网站服务:nginx,apache,lighttpd,php,tomcat,resin 数据   库:MySQL,Mari ...

  3. 快速搭建CentOS+ASP.NET Core环境支持WebSocket

    环境:CentOS 7.x,.net core 2 以下.net core 2安装操作为官方方法.如果你使用Docker,那么更简单了,只需要docker pull microsoft/dotnet就 ...

  4. Hashtable源码解析(JDK1.8)

    package java.util; import java.io.*; import java.util.concurrent.ThreadLocalRandom; import java.util ...

  5. Java设计模式-责任链模式

    提出问题: 最初接触责任链模式就是在struts2中,在当时学的时候看了一眼,大概知道了原理,最近在复习,模拟struts2,说是模拟只是大体模拟了struts2的工作流程,很多东西都是写死的,只是为 ...

  6. shiro(二)自定义realm,模拟数据库查询验证

    自定义一个realm类,实现realm接口 package com; import org.apache.shiro.authc.*; import org.apache.shiro.realm.Re ...

  7. Mycat 分片规则详解--范围分片

    实现方式:切分规则根据文件(autopartition-long.txt)配置的范围来进行切片,制定基准列的取值范围,然后把这一范围的所有数据都放到一个DN上面 优点:适用于整体数量可知或总数量为固定 ...

  8. 缺少libssl.so.4文件

    1.报错代码: /usr/local/pureftpd/sbin/pure-ftpd: error while loading shared libraries: libssl.so.4: wrong ...

  9. Algorithm --> 棋盘中求出A到B的最小步数

    求出A到B的最小步数 给定象棋盘,以及位置A和B, 求出从A到B的最小步数 代码: #include <cstdio> #include <iostream> #include ...

  10. java 函数初始化作用

    本人小白一枚,看java类的初始化的时候好晕的说,我觉着书上尽管说的对.但总认为有些信息没说出来,没说清楚,看了好多文章博客的,如今有些感悟,来小写下总结,也算是为以后再次复习种个好果子. 先摘一下书 ...