java - 使用 SQL 查询的基本 Hibernate 问题

标签 java hibernate jakarta-ee

我有一个 java 对象 Person,具有 3 个属性 firstnamelastnameusername

我有一个 Oracle 存储过程返回包含 3 列的结果集。 一切都很好。

现在我有另一个存储过程,它只返回名字和姓氏,但不返回用户名。

我收到以下错误:

Could not read column value from result set username

Hibernate 尝试从结果集中获取用户名属性。 如果我删除属性用户名,那么它就可以了。

我的配置:

<sql-query name="normalise" callable="true" >
<return alias="val" class="com.nbfg.sipc.model.Person">
<return-property name="firstname" column="FIRST_NAME"/>
<return-property name="lastname" column="LASTNAME_NAME"/>
</return>
{call SCHSIPC.PKG_SIPC_APP.PRC_SIPC_NORMALISE_RS(?, ?, ?, ?, ?) }
</sql-query>

我的Pojo(无注释)

@Entity
public class Person {

    private String firstname;
    private String lastname;
    private String username;
...

通话:

private Value call(String app, String cat, String col, String valeure, String query) {
    try {
        Query q = getSessionFactory().openStatelessSession().getNamedQuery(query);
        q.setString(0, app).setString(1, cat).setString(2, col).setString(3, valeure);
        return (Person) q.list().get(0);
    } catch (org.hibernate.QueryTimeoutException ex) {
        throw new IllegalArgumentException(ex.getCause().getMessage());
    }
}

如果我从我的 Pojo 中删除属性username,一切都会正常。我可以重复使用同一个 PoJo 吗?

谢谢

最佳答案

谢谢你的代码。我对此不是 100% 确定,但我相信使用 Hibernate SQL 查询必须返回您希望查询实例化的对象的所有字段。

您可能想要尝试的另一种解决方案是依赖 HQL 并根据需要实例化对象。例如,从 Person p 中选择 new Person(firstName, lastName),其中 p.username = ... 这实际上允许您在查询中使用任何类型(具有匹配类型的字段)。

这可以解决您眼前的问题,但我不确定如何解决在这种情况下使用存储过程的问题。希望这可以帮助。

关于java - 使用 SQL 查询的基本 Hibernate 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842064/

相关文章:

java - MOXy 不导入它生成的其他模式

Hibernate 为 PostgreSQL 插入生成两个不同的序列 ID

java - JSF 2.0 如何根据用户权限显示元素?

JavaEE : Question about design

java - 将库从 org.json 更改为 Jackson 以解析 JSON

java - 不兼容的类型 : T#1 cannot be converted to T#2

java - 使用 POJO 对象类将 JSON 解析为 POJO 对象列表

java - CertPathValidatorException Java 尝试使用 SSL 连接到服务器数据库

java - Hibernate native 查询显示异常

java - 名称节点 : java.net.BindException