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/

相关文章:

java - UniObjects for Java : How to get response String when error occurred in UniCommand. exec()

java - 如何以编程方式调用作为独立任务运行的按钮?

c++ - 无法在 SQLite 中设置 user_version

在服务器上部署后,java spring web 应用程序不起作用

使用 Spring Boot 后端通过 Google Sign-In 进行 Android 登录

java - 存储过程不产生结果

java - Ant测试编译找不到主类

java - 仅当 ArrayList 等于 bookID 时才更新它吗?

sql - 遍历sql结果集并删除[n]个重复项

c# - 在C#中存储读者信息