Oracle 我的Hibernate配置有什么问题?

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 "

我有一个使用Spring+JSF+PrimeFaces+Hibernate+MySQL的应用程序,所以我被告知需要将数据库从MySQL迁移到Oracle,我做到了。 因此,当我测试应用程序时,我发现hibernate创建的一些查询无法工作

例如,我的应用程序有如下查询:

从usuarios U中选择U.ID 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>
如果用户名!=架构所有者

<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表名不区分大小写。如果您将表重新创建为不区分大小写,则可能会丢失实体中的引号。