所以我正在尝试使用 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/