`

解决:hibernate 实现空间数据库oracle spatial

阅读更多

  本来报错“无效列类型”,但是今天在“大强”“linliangyi2007”的要求下公

 

布代码以供找错,于是自己重新整理了一个test,发现可以用了,呵呵,奇怪了

 

呀,可能是我原来程序那里有点不对,我再找找去。在此特别感谢两位“大强”

 

“linliangyi2007”!

 

实体类:User:

 

package com.test.vo;

import com.navsys.spatial.JGeometryType;

public class User {
	private Integer id;
	private  String name;
	private JGeometryType location;
	/**
	 * 
	 */
	public User() {
		super();
	}
	/**
	 * @param name
	 * @param location
	 */
	public User(String name, JGeometryType location) {
		super();
		this.name = name;
		this.location = location;
	}
	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}
	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}
	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	/**
	 * @return the location
	 */
	public JGeometryType getLocation() {
		return location;
	}
	/**
	 * @param location the location to set
	 */
	public void setLocation(JGeometryType location) {
		this.location = location;
	}
	
	
}

 映射文件:

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping package="com.test.vo">
<class name="User" table = "tb_user" schema="CMSDB">
<id name="id" type="integer">
<column name="User_ID" precision="22" scale="0" />
<generator class="native">
<param name="sequence">WQ_SEQUENCE</param>
</generator>
</id>
<property name="name" not-null="true"/>
<property name = "location" type="com.navsys.spatial.JGeometryType"/>
</class>
</hibernate-mapping>

 

  hibernate.cfg.xml:

 

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- dialect for Oracle 10G Spatial -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url"> jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="connection.username">CMSDB</property>
<property name="connection.password">CMSDB</property>
<!--  dialect for Oracle 10G Spatial  --> 
<property name="hibernate.dialect">com.navsys.spatial.OracleSpatialDialect</property>
<!--加载hibernate自动更新数据库结构-->
<property name="hibernate.hbm2ddl.auto" >update</property>
<!-- 让hibernate自动管理会话环境 --> 
<property name="current_session_context_class">thread</property>     
<!--配置的JDBC连接池-->
<property name="connection.pool_size">5</property>
<!--显示查询语句-->
<property name="hibernate.show_sql">true</property>
<!--格式化SQL-->
<property name="hibernate.format_sql">true</property>
<!--配置二级缓存-->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!--使用二级缓存第三方提供商-->
<property name="hibernate.cache.provider_class"> 
		org.hibernate.cache.EhCacheProvider</property>
<mapping resource="com/test/vo/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>

  

导出数据库:

 

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class ExportDB {


	public static void main(String[] args) {
	  
		Configuration cfg = new Configuration().configure();
		
		SchemaExport export = new SchemaExport(cfg);
		
		export.create(true, true);
		
	}

}

  运行ExportDB.JAVA:正常创建数据库:

 

   drop table CMSDB.tb_user cascade constraints

    drop sequence WQ_SEQUENCE

    create table CMSDB.tb_user (
        User_ID number(10,0) not null,
        name varchar2(255 char) not null,
        location sdo_geometry,
        primary key (User_ID)
    )

    create sequence WQ_SEQUENCE
 

 

最好测试类:

 

package test.upload;

import oracle.spatial.geometry.JGeometry;

import org.hibernate.Session;

import com.navsys.spatial.JGeometryType;
import com.test.vo.User;

import junit.framework.TestCase;

public class Upload extends TestCase {
	public void testSave() {

		JGeometry geometry = null;
		Session session = null;
		String s = "测试2";
		try {
			session = HSFUtility.getSession();
			session.beginTransaction();

			User u = new User();
			u.setName(s);

			double[] coords = { 113.2, 23 };

			geometry = JGeometry.createPoint(coords, 2, 1);

			JGeometryType point = new JGeometryType(geometry);

			u.setLocation(point);
			session.save(u);

			session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
			throw new java.lang.RuntimeException();
		} finally {
			HSFUtility.closeSession();
		}

	}
}

 

昨晚试了报错如下:  利用了HIbernate Oracle 里的JGeomtry。做映射,可以建数据库,但无法上传数据,报以下错误,谁好心帮我看看啥问题,说是“无效的列类型”: 

21:19:55,890 WARN JDBCExceptionReporter:71 - SQL Error: 17004, SQLState: null 21:19:55,906 ERROR JDBCExceptionReporter:72 - 无效的列类型 21:19:55,906 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session org.hibernate.exception.GenericJDBCException: could not insert: [cmsdb.database.Entity.WQ_Vessel_VO] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2202) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2595) at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at com.database.test.TestUpload.testSave(TestUpload.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) Caused by: java.sql.SQLException: 无效的列类型 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3433) at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:4197) at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:4186) at com.navsys.spatial.JGeometryType.nullSafeSet(JGeometryType.java:141) at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:146) at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1932) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2178) ... 27 more org.hibernate.exception.GenericJDBCException: could not insert: [cmsdb.database.Entity.WQ_Vessel_VO] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2202) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2595) at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:51) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at com.database.test.TestUpload.testSave(TestUpload.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) Caused by: java.sql.SQLException: 无效的列类型 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:3433) at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:4197) at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:4186) at com.navsys.spatial.JGeometryType.nullSafeSet(JGeometryType.java:141) at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:146) at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1932) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2178) ... 27 more

2
1
分享到:
评论
1 楼 linliangyi2007 2009-08-10  
请吧你的hibernate配置和Bean中的代码提供一下,谢谢

相关推荐

    空间数据库课件:第四讲 Oracle 及Oracle Spatial.ppt

    总结来说,Oracle数据库结合Oracle Spatial模块,为管理和操作空间数据提供了全面而强大的解决方案,不仅满足了传统的事务处理需求,还能够高效地处理复杂的地理信息和空间分析任务。对于GIS应用和需要处理空间数据...

    Oracle Spatial与ArcGIS连接

    - **Oracle Spatial:**Oracle数据库的一个扩展模块,专门用于存储和管理空间数据。 **3.2 连接过程** 1. **环境准备:** - 确保安装有支持Oracle Spatial的Oracle数据库版本。 - 安装并配置ArcGIS环境,包括...

    xtreme for java连接oracle spatial 空间数据库.doc

    本篇将深入探讨如何使用xtreme for Java来连接Oracle Spatial空间数据库,帮助开发者实现高效的数据交互。 首先,了解xtreme for Java。xtreme for Java是一款Java开发工具,它提供了对各种数据库系统的访问接口,...

    基于Oracle Spatial空间数据库数据的动态读取.pdf

    基于Oracle Spatial空间数据库数据的动态读取 ...通过本文,读者可以了解Oracle Spatial空间数据库的基本概念和功能,以及如何使用VC++ 6.0和MapX集成二次开发来实现对Oracle Spatial空间数据库数据的动态读取。

    oracle.spatial的jar包

    Oracle Spatial 是 Oracle 数据库的一个组件,专门用于处理和分析地理空间数据。这个组件提供了丰富的功能,包括地理坐标系统的转换、空间查询、空间分析以及地图显示等。在Java开发环境中,Oracle Spatial 提供了...

    Oracle Spatial空间信息管理:Oracle Database 11g课本所需数据库数据

    《Oracle Spatial空间信息管理:Oracle Database 11g》是世界级Oracle Spatial专家Ravi Kothuri、Albert Godfrind和Euro Beinat自力作,旨在向您提供空间信息管理方面的概念知识和实用技能,帮助您成为该领域的专家...

    Oracle_Spatial空间数据库设计打包资料

    Oracle Spatial是Oracle数据库的一个扩展模块,专为处理地理空间数据而设计。在GIS(地理信息系统)领域,Oracle Spatial被广泛用于存储、管理、查询和分析地理位置相关的数据。本打包资料针对Oracle Spatial空间...

    Oracle Spatial用户指南

    总的来说,"Oracle Spatial用户指南"是学习和使用Oracle Spatial模块的重要参考资料,无论你是初学者还是经验丰富的开发者,都能从中获取到详尽的指导和实践建议,以实现高效的空间数据库开发。

    oracle spatial.zip

    Oracle Spatial 是 Oracle 数据库的一个扩展模块,专门用于处理地理空间数据。这个压缩包"oracle spatial.zip"包含了关于这个模块的开发文档,特别是针对 GeoRaster 的部分,GeoRaster 是 Oracle Spatial 提供的一种...

    pro oracle spatial for oracle db 11g英文版电子书(含代码和数据)

    《Pro Oracle Spatial for Oracle Database 11g》是一本深入探讨Oracle Spatial特性的专业书籍,专...通过阅读本书并实践相关示例,你可以有效地利用Oracle Spatial解决复杂的空间数据问题,提升GIS应用的质量和效率。

    Oracle Spatial9i介绍

    通过Oracle Spatial9i,GIS开发者能够更加便捷地管理空间数据,并利用Oracle数据库的强大功能来实现高效的查询和分析。对于需要处理大量空间数据的应用场景来说,Oracle Spatial9i无疑是一个非常有价值的选择。

    基于Oracle Spatial的矢量空间数据管理机制.pdf

    Oracle Spatial可以与Oracle数据库集成,提供了一个完整的矢量空间数据管理解决方案。该系统可以应用于各种GIS系统,提供了一个强大的事务机制和灵活的数据管理机制。 Oracle Spatial的优点包括: * 兼顾对象...

    Oracle Spatial空间数据库简介.ppt

    Oracle Spatial是Oracle数据库企业版中的一个扩展模块,专门用于处理和管理空间数据。它提供了一整套工具和服务,使得在数据库中存储、查询、分析和可视化地理信息变得可能。Oracle Spatial支持多种空间数据模型,...

    Oracle Spatial Developer's Guide

    《Oracle Spatial Developer's Guide》是Oracle公司为开发者提供的一份详尽指南,专注于其空间数据库解决方案——Oracle Spatial。Oracle Spatial是Oracle数据库的一个扩展模块,它提供了处理地理空间数据的能力,...

    Oracle Spatial空间索引 解析

    Oracle Spatial是甲骨文公司推出的空间数据管理解决方案,其核心是一组专门针对Oracle数据库中空间元素的SQL模式、函数集以及空间索引机制。Oracle Spatial允许对空间数据进行存储、检索、更新和查询操作,是处理...

    基于Oracle Spatial的城市规划用地数据库的设计与实现.pdf

    基于Oracle Spatial的城市规划用地数据库的设计与实现 本文主要讨论了基于Oracle Spatial的城市规划用地数据库的设计与实现。Oracle Spatial是一个强大的空间数据库管理系统,能够存储和管理大量的空间数据,具有...

    Oracle Spatial空间信息管理:Oracle Database 11g_管会生编著_part2

    书中涵盖了Oracle数据库中空间信息管理的所有内容。主要阐述了空间信息管理的主要概念,Oracle Spatial的架构,以及大量用于管理空间数据的函数和操作。详细描述了Oracle Spatial所提供的用于存储、检索、分析和可视...

    利用MapX访问Oracle Spatial空间数据库的研究.pdf

    【描述】:本文主要探讨了如何利用MapX组件访问Oracle Spatial空间数据库,同时介绍了在使用EasyLoader工具上传空间数据时可能出现的问题及其解决方案。 【标签】:Oracle数据库,关系型数据库,参考文献,专业指导...

    基于Oracle Spatial的ITS空间数据库的实现及访问.pdf

    Oracle Spatial允许用户将空间数据(如地理位置、地图图形等)与传统的属性数据(如人口统计、车辆信息等)一起存储在同一个数据库中,从而实现数据的一体化管理和分析。 【智能交通系统(ITS)与空间数据库】 ...

    Oracle Spatial 官方文档 pdf

    Oracle Spatial 是 Oracle 数据库的一个重要...总之,Oracle Spatial 是一个功能强大的空间数据库解决方案,为处理地理空间信息提供了全面的工具集。通过深入学习和实践,可以充分利用其潜力来解决各种地理空间问题。

Global site tag (gtag.js) - Google Analytics