为什么Hibernate不会执行查询

时间:2014-09-09 14:41:24

标签: java hibernate

我正在使用hibernate教程帮助我在Java servlet中使用Hibernate从Oracle数据库中读取一组SFTP连接详细信息,以使它们可配置。 Oracle数据库表名为SFTP_CREDS。我有一个类来设置会话等,然后下面的第一行代码运行,但然后在第二行失败,说明消息"无法执行查询"。为什么会这样?我做错了什么?

以下是设置查询的代码,然后在第二行失败;

Query query = hibernateSession.createQuery("FROM SFTPCreds");
java.util.List list = query.list();

这是SFTPCreds类;

package the.package.name;

public class SFTPCreds {

   private String sftp_host;
   private int sftp_port;
   private String sftp_username;
   private String sftp_password;
   private String sftp_fingerprint;
   private String sftp_hostkey;
   private String sftp_file;

     public String getSftp_host() {
        return sftp_host;
     }
     public void setSftp_host(String sftp_host) {
         this.sftp_host = sftp_host;
     }

     public int getSftp_port() {
         return sftp_port;
     }
     public void setSftp_port(int sftp_port) {
         this.sftp_port = sftp_port;
     }

     public String getSftp_username() {
         return sftp_username;
     }
     public void setSftp_username(String sftp_username) {
         this.sftp_username = sftp_username;
     }

     public String getSftp_password() {
        return sftp_password;
     }
     public void setSftp_password(String sftp_password) {
        this.sftp_password = sftp_password;
     }

     public String getSftp_fingerprint() {
        return sftp_fingerprint;
     }
     public void setSftp_fingerprint(String sftp_fingerprint) {
        this.sftp_fingerprint = sftp_fingerprint;
     }

     public String getSftp_hostkey() {
         return sftp_hostkey;
     }
     public void setSftp_hostkey(String sftp_hostkey) {
         this.sftp_hostkey = sftp_hostkey;
     }

     public String getSftp_file() {
        return sftp_file;
     }
     public void setSftp_file(String sftp_file) {
         this.sftp_file = sftp_file;
     }

}

这是hftnate.cfg.xml文件中列出的映射文件sftpcreds.hbm.xml

<?xml version="1.0" ?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="the.package.name">
  <class name="SFTPCreds" table="SFTP_CREDS">
    <id column="SFTP_HOST" name="sftp_host">
          <generator class="assigned" />
    </id>
    <property column="SFTP_PORT" generated="never" lazy="false" 
           name="sftp_port" />
    <property column="SFTP_USERNAME" generated="never" lazy="false" 
           name="sftp_username" />
    <property column="SFTP_PASSWORD" generated="never" lazy="false" 
           name="sftp_password" />
    <property column="SFTP_FINGERPRINT" generated="never" lazy="false" 
           name="sftp_fingerprint" />
    <property column="SFTP_HOSTKEY" generated="never" lazy="false" 
          name="sftp_hostkey" />
    <property column="SFTP_FILE" generated="never" lazy="false" 
         name="sftp_file" />
  </class>
</hibernate-mapping>

以下是控制台输出的一些细节,我刚刚注意到第二组消息表示表或视图不存在。该表确实存在但可能我在某处配置错误

 org.hibernate.exception.SQLGrammarException: could not execute query
       at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
       at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
       at org.hibernate.loader.Loader.doList(Loader.java:2235)
    . many
    . more 
    . lines
    .
    Caused by: java.sql.SQLException: ORA-00942: table or view does not exist
       at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
       at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)

最后,我没有使用与数据源的直接JDBC连接我正在使用Java命名目录接口(JNDI)并在Tomcat的全局conf.xml中声明连接,并且hibernate.cfg.xml指向JNDI数据源。为什么这不起作用?

0 个答案:

没有答案