【问题标题】:Hibernate 5.2 Native Query with void function PostgresqlHibernate 5.2 Native Query with void function Postgresql
【发布时间】:2019-09-24 05:01:57
【问题描述】:

我是 hibernate 的初学者。 我在 PostgreSQL 中有一个带有 10 个参数的 void 函数(它是一个“创建或更新”函数),我想在我的应用程序中使用它。

我读到执行本机查询是最简单的方法。

所以我写了这段代码:

Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();

String a = "SELECT fun('text', 'text', 12345678987, 'text', 'text', 50, 37500, 133456788, 'text', 2);
session.createNativeQuery(a);

session.getTransaction().commit();
session.close();

应用程序启动时没有任何错误,但是当我检查数据库时,我没有新记录。

有人可以解释什么是错的吗?我应该对这个函数做点别的吗?

【问题讨论】:

    标签: java hibernate nativequery


    【解决方案1】:

    当您调用session.createNativeQuery(a) 时,它会创建一个查询,但在您调用本机查询的executeUpdate() 方法之前它不会执行它。

    【讨论】:

    • 我使用 getSingleResult() 就像 vc73 之前写的那样,因为我的函数只返回 void。但是现在我有 org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 我仍然不知道出了什么问题。
    【解决方案2】:

    When I check database I don't have new rekord Ofc 你没有,你正在做一个SELECT,所以你没有在你的数据库中做任何事情。

    此外,为了执行您的查询,您不需要打开任何事务,因为您没有插入/更新/删除任何内容,您需要执行以下操作以获得结果:

    session.createNativeQuery(a).getResultList() 如果您希望此查询有多个结果

    session.createNativeQuery(a).getSingleResult() 如果您只期望一个结果。

    【讨论】:

    • 但我写的是函数(函数中有 INSERT,所以我应该有新记录)。它是 void 函数,我应该只得到一个(void)结果,所以我使用 getSingleRecord()。现在我有 MappingError ``` org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 ```
    • 该错误表示您的查询返回的类型不受支持
    • 一个问题:你的函数“有趣”有返回值吗?因为如果没有,这意味着您的 select 语句将永远不会返回任何内容。
    • 我的函数被声明为返回 void "... RETURNS void AS $$ ..." hibernate 可能不支持这个吗?
    • 我决定更改整数的返回值。现在它工作正常了。
    猜你喜欢
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2018-08-23
    相关资源
    最近更新 更多