我正在使用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数据源。为什么这不起作用?