项目从mysql迁移到oracle所需要修改

本文介绍了如何将基于Struts2、Spring和Hibernate(SSH)的项目从MySQL迁移到Oracle数据库的过程,包括更换数据库驱动、调整连接池配置、更改Hibernate方言及解决迁移过程中遇到的具体问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          以前的项目使用struts2.3.4+spring3.1.1 +hibernate3.5.5 (SSH2)框架,采用mysql数据库,根据需要换成oracle。下面是修改所做的工作

1、  mysql 5.5用的mysql-connectoro-java-5.1.15.jar  ,换成oracle 11g在web-inf/lib下添加ojdbc14.jar、

2、applicationcontext.xml如下

<!--db配置文件导入	-->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:jdbc.properties</value>
		</property>
	</bean>

 
<!-- 采用c3p0连接池,引入 c3p0-0.9.1.jar包-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
       
       <property name="driverClass" value="${database.driver}"/>
		<property name="jdbcUrl" value="${database.url}"/>
		<property name="user" value="${database.user}"/>
		<property name="password" value="${database.password}"/>
       <!-- 指定连接数据库连接池的最大连接数 -->
		<property name="maxPoolSize" value="40"/>
		<!-- 指定连接数据库连接池的最小连接数 -->
		<property name="minPoolSize" value="1"/>
		<!-- 指定连接数据库连接池的初始化连接数 -->
		<property name="initialPoolSize" value="1"/>
		<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
		<property name="maxIdleTime" value="20"/>
        </bean>
        	
 <bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${database.dialect}</prop>			
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			
			</props>
		</property>
		<property name="packagesToScan">
			<list>
				<value>com/test/demo/bean</value><!-- 扫描实体类,也就是平时所说的model -->
			</list>
	   </property>
	</bean>


 

修改jdbc.properties

#oracle
database.driver=oracle.jdbc.driver.OracleDriver
database.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
database.user=test
database.password=test
database.dialect=org.hibernate.dialect.Oracle9Dialect

#mysql
#database.driver=com.mysql.jdbc.Driver
#database.url=jdbc\:mysql\://127.0.0.1\:3306/test?useUnicode\=true&amp;characterEncoding\=utf-8
#database.user=root
#database.password=123456
#database.dialect=org.hibernate.dialect.MySQL5Dialect


3、hibernate采用的注解,主键自动增长,把@GeneratedValue(strategy = GenerationType.AUTO)换成序列sequence自动增长

 @SequenceGenerator(name = "generator",allocationSize=1,initialValue=1,sequenceName="DEPARTMENT_ID_SEQ"
		@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")

 

		@Id
		 @SequenceGenerator(name = "generator",allocationSize=1,initialValue=1,sequenceName="DEPARTMENT_ID_SEQ"
		@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "generator")
		//	@GeneratedValue(strategy = GenerationType.AUTO)
		@Column(name = "id", nullable = false)
		public Integer getId() {
			return this.id;
		}
		public void setId(Integer id) {
			this.id = id;
		}




移植过程遇到的问题:

1、ERROR [pool-2-thread-1] (SchemaUpdate.java:213) - ORA-02261: 表中已存在这样的唯一关键字或主键

,这个错误是因为以前mysql写的时候主键,有unique=true这句话,而在oracle里报错,去掉就ok了

2、(SchemaUpdate.java:213) - ORA-00904: : 标识符无效  ,这个错误是因为我的表字段里用到了oracle的保留字或者关键字,比如audit,改成其他名字就可以了

3、没有创建sequence的权限,顾名思义,为该数据库用户添加拥有创建sequence的权限就ok了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值