各位大神,小菜鸟有一个疑惑。一个项目里面链接了两个数据库,分别是MySQL和Oracle,他们的DateSource和SessionFactory如下:
<!--start 配置DATASOURCES --> <bean id="dataSourceOracle" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- <property name="name" value="${oracle.driverClassName}" /> --> <property name="url" value="${oracle.dailypre_url}" /> <property name="username" value="${oracle.username}" /> <property name="password" value="${oracle.password}" /> <property name="maxOpenPreparedStatements" value="100"/> <property name="maxActive" value="${druid.max_size}" /> <property name="filters" value="config" /> <!-- 配置数据库加密 --> <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${oracle.publickey}" /> </bean> <bean id="dataSourceMySQL" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- <property name="name" value="${mysql.driverClassName}" /> 可根据URL自动判断出DBDRIVER--> <property name="url" value="${mysql.dailyreport_url}" /> <property name="username" value="${mysql.username}" /> <property name="password" value="${mysql.password}" /> <property name="maxActive" value="${druid.max_size}" /> <property name="filters" value="config" /> <!-- 配置数据库加密 --> <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${mysql.publickey}" /> </bean> <!--end 配置DATASOURCES --> <!--start 配置SessionFactory--> <bean id="sessionFactoryMySQL" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSourceMySQL"></property> <!-- 注解的实体类通过此扫描的方式注入 --> <property name="packagesToScan" value="org.daily.**.entity" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- hibernate.current_session_context_class此处与Spring2.x不同,不能为thread,否则报错:?? is not valid without active transaction --> <prop key="hibernate.current_session_context_class"> org.springframework.orm.hibernate5.SpringSessionContext </prop> </props> </property> </bean> <bean id="sessionFactoryOracle" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSourceOracle"></property> <!-- 注解的实体类通过此扫描的方式注入 --> <property name="packagesToScan" value="org.daily.**.entity" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> <prop key="hibernate.show_sql">true</prop> <!-- hibernate.current_session_context_class此处与Spring2.x不同,不能为thread,否则报错:?? is not valid without active transaction --> <prop key="hibernate.current_session_context_class"> org.springframework.orm.hibernate5.SpringSessionContext </prop> </props> </property> </bean> <!--end 配置SessionFactory-->
现提取MySQL数据库中的数据时,没有问题。
但是当提取Oracle中数据时,进行查询测试,
报错,如下:
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [create table USER_INFO (USER_ID varchar(255) not null, department1 varchar(255), department2 varchar(255), username varchar(255), primary key (USER_ID)) type=InnoDB] at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:59) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:431) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:420) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.createTable(SchemaMigratorImpl.java:236) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets(SchemaMigratorImpl.java:167) at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:60) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:133) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:101) at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:470) at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) at org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:416) at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:401) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ... 71 more Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 1 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) at com.mysql.jdbc.Util.getInstance(Util.java:387) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2470) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2617) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2546) at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541) at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605) at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469) at com.alibaba.druid.filter.FilterChainImpl.statement_executeUpdate(FilterChainImpl.java:2377) at com.alibaba.druid.filter.FilterAdapter.statement_executeUpdate(FilterAdapter.java:2486) at com.alibaba.druid.filter.FilterChainImpl.statement_executeUpdate(FilterChainImpl.java:2375) at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeUpdate(StatementProxyImpl.java:225) at com.alibaba.druid.pool.DruidPooledStatement.executeUpdate(DruidPooledStatement.java:169) at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56) ... 86 more
<p>
</p><p>
<br>
</p>
<p></p>
<p>
<span></span>
</p>
<p>
百思不得其解,请高手指教。
</p>
<p>
实体类代码:
</p>
<p>
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import org.springframework.stereotype.Component; @Component @Entity @Table(name = "USER_INFO") public class UserInfo implements java.io.Serializable{ @Id @Column(name = "USER_ID") private String userId; @Column(name = "username") private String userName; @Column(name = "department1") private String buMen; @Column(name = "department2") private String keShi; getter setter略 }
<p>
</p><p>
<br>
</p>
<p></p>
<property<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;font-size:14px;line-height:15.4px;background-color:#FFFFFF;">name="packagesToScan"<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;font-size:14px;line-height:15.4px;background-color:#FFFFFF;">value="org.daily..entity"<spanstyle="font-family:Consolas,'BitstreamVeraSansMono','CourierNew',Courier,monospace;font-size:14px;line-height:15.4px;background-color:#FFFFFF;">/>你的两个数据源都是扫描这个包里面的东西,默认是走到了mysql里面,oracle实体和mysql实体包分开就没事了,不要扫描到同一包下面而又是不同的数据库实体十分感谢,确实是这个问题。只是想不通程序在怎么运行的,因为在使用Oracle链接时,并没有连接过MySQL。
别闹。。。
java程序怎么知道你要的是oracle还是mysql里的数据啊?
<preclass="brush:java;toolbar:true;auto-links:false;"><beanid="sessionFactoryMySQL"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><propertyname="dataSource"ref="dataSourceMySQL"></property><!--注解的实体类通过此扫描的方式注入--><propertyname="packagesToScan"value="org.daily..entity"/><spanstyle="font-size:10pt;line-height:1.5;">你这不明明配的mysql的么
<divclass='ref'>别闹。。。
java程序怎么知道你要的是oracle还是mysql里的数据啊?
<preclass="brush:java;toolbar:true;auto-links:false;"><beanid="sessionFactoryMySQL"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><propertyname="dataSource"ref="dataSourceMySQL"></property><!--注解的实体类通过此扫描的方式注入--><propertyname="packagesToScan"value="org.daily.**.entity"/><spanstyle="font-size:10pt;line-height:1.5;">你这不明明配的mysql的么
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。