java - HQL 不返回结果,但生成的 SQL 在 SQL Developer 上完美运行

标签 java sql hibernate hql oracle-sqldeveloper

所以我有这个查询

private static final String GET_LOCK_HISTORY1 = "select lh from UserLockHistoryEntity lh "; 

使用此代码执行

List<UserLockHistoryEntity> result = getQuery(GET_LOCK_HISTORY1).list();

这将返回一个空数组。在控制台上我得到生成的 SQL

   select
        userlockhi0_.USER_LOCK_HISTORY_ID as USER_LOC1_15_,
        userlockhi0_.LOCK_TYPE as LOCK_TYP2_15_,
        userlockhi0_.TIMESTAMP as TIMESTAM3_15_,
        userlockhi0_.LOCKED_USER_ID as LOCKED_U4_15_,
        userlockhi0_.COMPANY_ID as COMPANY_5_15_,
        userlockhi0_.PARTNER_ID as PARTNER_6_15_,
        userlockhi0_.IP_ORIGIN as IP_ORIGI7_15_,
        userlockhi0_.LOCKED_BY_USER as LOCKED_B8_15_,
        userlockhi0_.LOCKED_BY_TYPE as LOCKED_B9_15_,
        userlockhi0_.LOCK_REASON as LOCK_RE10_15_ 
    from
        ONCPRTDEV.USER_LOCK_HISTORY userlockhi0_

我将其粘贴到 SQL Developer 上,它返回 8 行(所有表记录)

下面是我的映射文件

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jan 22, 2014 3:07:58 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="pt.vdf.onc.core.business.entity.user.UserLockHistoryEntity" table="USER_LOCK_HISTORY">
        <id name="id" type="java.lang.Long">
            <column name="USER_LOCK_HISTORY_ID" />
            <generator class="assigned" />
        </id>
        <property name="lockType">
            <column name="LOCK_TYPE" />
            <type name="org.hibernate.type.EnumType">
                <param name="enumClass">pt.vdf.onc.core.common.type.user.UserLockType</param>
            </type>
        </property>
        <property name="timestamp" type="java.lang.String">
            <column name="TIMESTAMP" />
        </property>
        <property name="userId" type="java.lang.Long">
            <column name="LOCKED_USER_ID" />
        </property>
        <property name="companyId" type="java.lang.Long">
            <column name="COMPANY_ID" />
        </property>
        <property name="partnerId" type="java.lang.Long">
            <column name="PARTNER_ID" />
        </property>
        <property name="ipOrigin" type="java.lang.String">
            <column name="IP_ORIGIN" />
        </property>
        <property name="lockedByUser" type="java.lang.Long">
            <column name="LOCKED_BY_USER" />
        </property>

        <property name="lockedByType">
            <column name="LOCKED_BY_TYPE" />
            <type name="org.hibernate.type.EnumType">
                <param name="enumClass">pt.vdf.onc.core.common.type.user.UserLockByType</param>
            </type>
        </property>
        <property name="lockedReason">
            <column name="LOCK_REASON" />
            <type name="org.hibernate.type.EnumType">
                <param name="enumClass">pt.vdf.onc.core.common.type.user.UserLockReason</param>
            </type>
        </property>
    </class>
</hibernate-mapping>

和实体

public class UserLockHistoryEntity implements java.io.Serializable {


    private Long id;
    private UserLockType lockType;
    private String timestamp;
    private Long userId;
    private Long companyId;
    private Long partnerId;
    private String ipOrigin;
    private Long lockedByUser;
    private UserLockByType lockedByType;
    private UserLockReason lockedReason;

    //getters and setters here (removed them for simplicity)

}

表定义:

USER_LOCK_HISTORY_ID    NUMBER(38,0)
LOCK_TYPE   NUMBER(38,0)
TIMESTAMP   DATE
LOCKED_USER_ID  NUMBER(38,0)
COMPANY_ID  NUMBER(38,0)
PARTNER_ID  NUMBER(38,0)
IP_ORIGIN   VARCHAR2(30 BYTE)
LOCKED_BY_USER  VARCHAR2(50 BYTE)
LOCK_REASON NUMBER(38,0)
LOCKED_BY_TYPE  NUMBER

以一些行为例:

809 0   14.01.22    5003953 1003739 0   127.0.0.1   5003953 2   0
810 0   14.01.22    5003953 1003739 0   127.0.0.1   5003953 2   0
811 0   14.01.22    2054497 621936  0   127.0.0.1   2054497 2   0

当查询在 SQL Developer 上完美运行时,为什么我会得到一个空结果列表?感谢您的帮助

最佳答案

对于

List<UserLockHistoryEntity> result = getQuery(GET_LOCK_HISTORY1).list();

有效的查询是

select lh from UserLockHistoryEntity lh

查询

select lh.id from UserLockHistoryEntity lh

有效结果是:

List<Long> result = getQuery(GET_LOCK_HISTORY1).list();

关于java - HQL 不返回结果,但生成的 SQL 在 SQL Developer 上完美运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311450/

相关文章:

java - 接口(interface)是否解决了 "deadly diamond of death"问题?

sql - 根据今天获取下一个工作日的算法

java - 如何从参数请求的值迭代

java - 在 JPA @GeneratedValue 列中手动指定主键的值

Java - 小数除以大数

java - 如何用maven切换conf tomcat

java - 参数化查询 : Check if field is in array of values in SELECT statement

sql - 使用来自另一个表的变量遍历 SQL 查询

hibernate - [HV000030 : No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.String'

java - 没有 Spring 和 XML 的最小 JPA 示例