我有一个使用Spring + JSF + PrimeFaces + Hibernate + MySQL的应用程序,所以我被告知我需要将数据库从MySQL迁移到Oracle,我做到了。 因此,当我测试应用程序时,我发现hibernate创建的一些查询无效。
例如我的应用程序有这样的查询:
select U.ID from usuarios U
并且使用mysql它可以工作,但是使用oracle 11g它告诉我它无法找到表或视图。
所以我用sql developer测试它,使它工作的唯一方法是将它改为:
select U.ID from "ROOT"."usuarios" U
那么现在应该如何配置hibernate,以便创建像我的第二个查询而不是第一个查询的查询?
这是我的hibernate配置:
<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUrl" value="jdbc:oracle:thin:@127.0.0.1:1521:xe" />
<property name="user" value="user" />
<property name="password" value="pass" />
<property name="maxPoolSize" value="50" />
<property name="maxStatements" value="0" />
<property name="minPoolSize" value="5" />
</bean>
<bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="annotatedClasses">
<list>
<value>com.proximate.model.Usuarios</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<!--prop key="hibernate.use_sql_comments">true</prop-->
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
答案 0 :(得分:1)
您可以使用架构所属的用户登录,在本例中为“ROOT”,这样您就不需要在表名之前键入架构的名称。
答案 1 :(得分:0)
如果用户名!=架构所有者,则需要设置hibernate.default_schema
(docs)。
<bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
...
</property>
<property name="hibernateProperties">
<props>
...
<prop key="hibernate.default_schema">your-schema-name</prop>
</props>
</property>
</bean>