Oracle 我的Hibernate配置有什么问题?
我有一个使用Spring+JSF+PrimeFaces+Hibernate+MySQL的应用程序,所以我被告知需要将数据库从MySQL迁移到Oracle,我做到了。 因此,当我测试应用程序时,我发现hibernate创建的一些查询无法工作 例如,我的应用程序有如下查询: 从usuarios U中选择U.ID mysql也可以,但oracle 11g告诉我它找不到表或视图。 因此,我使用sql developer对其进行了测试,使其工作的唯一方法是将其更改为:Oracle 我的Hibernate配置有什么问题?,oracle,hibernate,oracle11g,Oracle,Hibernate,Oracle11g,我有一个使用Spring+JSF+PrimeFaces+Hibernate+MySQL的应用程序,所以我被告知需要将数据库从MySQL迁移到Oracle,我做到了。 因此,当我测试应用程序时,我发现hibernate创建的一些查询无法工作 例如,我的应用程序有如下查询: 从usuarios U中选择U.ID mysql也可以,但oracle 11g告诉我它找不到表或视图。 因此,我使用sql developer对其进行了测试,使其工作的唯一方法是将其更改为: select U.ID from "
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>
如果用户名!=架构所有者
<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>
您可以使用模式所属的用户登录,在本例中为ROOT用户,这样您就不需要在表名之前键入模式名。这可能会有所帮助吗?我已经尝试过了,在我的查询中,我从ROOT.usuarios U获得了select U.ID,但它仍然找不到表。这不正是你在上面问题中提到的查询,即应该工作的查询吗?如果是,但它不适用于Hibernate,那是因为配置的数据源中的用户没有访问权限。我按照sinisa229 mihajlovski的建议连接了用户ROOT。现在我不需要执行ROOT.usuarios,只需执行usuarios,但如果我不使用双引号,查询将找不到表。是的,正如我在回答中所说,只有在用户名为架构所有者。事实上,这些引用似乎是必要的,这真的很奇怪。在Oracle中,请相信数据库配置很奇怪…确实很奇怪,因为在检查表之后,它们在quoetes之间是小写的,所以我取了quoetes并将它们放在大写中,这就成功了。此外,我需要在我的实体bean中添加quoetes,如下所示:@entity@Tablename=\usuarios\public class usuarios实现可序列化{我认为您以错误的方式创建了表。默认情况下,Oracle表名不区分大小写。如果您将表重新创建为不区分大小写,则可能会丢失实体中的引号。