java - 使用 Oracle、Hibernate 和 Spring...没有返回数据

标签 java database spring oracle hibernate

所以我正在尝试使用 spring 和 hibernate 连接到 Oracle 数据库。一切似乎都正常,但我无法确定我正在建立连接。在 DAOImpl 类中,我有以下代码:

    Session session = this.sessionFactory.openSession();
    System.out.println("connection: " + session.isConnected());
    System.out.println("is open: " +session.isOpen() );     
    Query q = session.createQuery("from " + Concept.class.getName());
    System.out.println(q.getQueryString());
    List<Concept> list = q.list();

isConnected 和 isOpen 都返回 true。然而列表是空的。

在 spring.xml 文件中,我继续注释掉用户名和密码,但 isConnected 和 isOpen 仍然返回 true。

看来我在连接上遇到了某种误报。我如何检查连接,如何知道我连接到正确的数据库?数据库受密码保护,因此连接应该会失败。

这一行:

System.out.println(q.getQueryString());

打印:

from com.mypackage.Concept

这是带注释的概念:

@Entity
@Table(appliesTo = "mySchema.CONCEPT")  //I've tried with and without the schema
public class Concept {
    @Column( name="ID")
    private long id;
    @Column( name="CODE")
    private String code;
    @Column(name="description")
    private String description;

配置:

        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@xx1.foo.com:1521:xx" />
         <property name="username" value="user" />
        <property name="password" value="pass" />
    </bean>
    <bean id="hibernate3AnnotatedSessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="annotatedClasses">
            <list>
                <value>mypackage.model.Concept</value>                     
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.current_session_context_class">thread</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

最佳答案

您的实体未被引用为 com.mypackage.Concept,而是被引用为 Concept

尝试改变这个:

Query q = session.createQuery("from " + Concept.class.getName());

为此:

Query q = session.createQuery("from " + Concept.class.getSimpleName());

Query q = session.createQuery("from Concept");

如果仍然没有返回任何结果,您可以运行 native 查询来检查可用数据:

String sql = "SELECT * FROM mySchema.CONCEPT";
SQLQuery query = session.createSQLQuery(sql);
List<Object[]> entities = query.list();

如果这没有返回任何数据,那么您在这张表上没有数据。

关于java - 使用 Oracle、Hibernate 和 Spring...没有返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28972799/

相关文章:

sql - 我应该转向 NoSQL 吗? (大数据)

java - Mockito 在调用具有可变数量参数的方法时使用参数匹配器

database - 什么技术可以帮助我快速搜索、过滤和分组广泛数据集中的任何列?

mysql - 存储所有用户的登录日期

spring - 使用特定的 application.properties 文件将 Spring Boot 应用程序部署到 Heroku

java - 未从 Controller 类调用验证方法

java - 从 Java ResultSet 获取 SQL

java - 队列中的多线程作业 - 作业太多?

java - Java 中的线程和多线程

java - Hibernate 即使在缓存命中时也会抛出查询