我遇到一个问题: org.hibernate.MappingException:JDBC类型的No Dialect映射:1111
尝试使用JPA创建本机查询时调用postgres函数。
我在启动单例中创建了一个EJB计时器,以每6小时运行一次Postgres函数。该函数返回void并检查过期的记录,将其删除并更新某些状态。它不接受任何参数,并且返回void。
如果我使用PgAdmin查询工具(选择function();)调用postgres函数,则该函数可以完美运行,并返回void。
在Glassfish 3.1.1上部署应用程序时,出现异常和部署失败。
这是(缩短的)堆栈跟踪:
WARNING: A system exception occurred during an invocation on EJB UserQueryBean method public void com.mysoftwareco.entity.utility.UserQueryBean.runRequestCleanup()
javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
...STACK TRACE BLAH BLAH BLAH ...
Caused by: javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
这是代码:
首先是JPA的东西:
public void runRequestCleanup() {
String queryString = "SELECT a_function_that_hibernate_chokes_on()";
Query query = em.createNativeQuery(queryString);
Object result = query.getSingleResult();
}
这是单例调用它:
@Startup
@Singleton
public class RequestCleanupTimer {
@Resource
TimerService timerService;
@EJB
UserQueryBean queryBean;
@PostConstruct
@Schedule(hour = "*/6")
void runCleanupTimer() {
queryBean.runRequestCleanup();
}
}
和功能:
CREATE OR REPLACE FUNCTION a_function_that_hibernate_chokes_on()
RETURNS void AS
$BODY$
DECLARE
var_field_id myTable.field_id%TYPE;
BEGIN
FOR var_field_id IN
select field_id from myTable
where status = 'some status'
and disposition = 'some disposition'
and valid_through < now()
LOOP
BEGIN
-- Do Stuff
END;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
我对JPA有足够的了解,试图使其运行存储过程。
我最终使用带准备好的语句的JDBC。在花了几个小时的徒劳尝试将方钉插入圆孔后,我在15分钟内做到了。我将持久性单元用来获取连接,创建准备好的语句并在完成后将其关闭的同一个jndi数据源称为。
因此,如果您需要从(现在主要是)JPA应用程序运行存储过程(或Postgres函数),这对我有用:
@Stateless
@LocalBean
public class UserQueryBean implements Serializable {
@Resource(mappedName="jdbc/DatabasePool")
private javax.sql.DataSource ds;
...
public void runRequestCleanup() {
String queryString = "SELECT cleanup_function_that_hibernateJPA_choked_on()";
Connection conn = null;
PreparedStatement statement = null;
try {
conn = ds.getConnection();
statement = conn.prepareCall(queryString);
statement.executeQuery();
} catch (SQLException ex) {
Logger.getLogger(UserQueryBean.class.getName()).log(Level.SEVERE, null, ex);
}finally{
try {
statement.close();
conn.close();
} catch (SQLException ex) {
Logger.getLogger(UserQueryBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
// bit of logging code here
}
...
}
忽略JPA在服务器上运行函数或存储过程的简单功能似乎令人恐惧。特别是除了void或受影响的行数以外不返回任何内容的代码。如果是故意的……则无可奉告。
编辑:添加了关闭连接。
问题内容: 我正在使用Postgresql 8.3,并具有以下简单功能,该功能会将a返回 给客户端 现在,我可以使用以下SQL命令来调用此函数并操纵返回的游标,但是游标名称是由PostgreSQL自动生成的 此外,如38.7.3.5中所述,显式地将游标名称声明为函数的输入参数 。返回游标。我可以声明自己的游标名称并使用此游标名称来操纵返回的游标,而不是为我自动生成的Postgresql吗?如果不是
这表示函数quarter()是在Hive1.3中引入的 https://cwiki.apache.org/confluence/display/hive/languageManual+udf#languageManualudf-datefunctions https://azure.microsoft.com/en-us/documentation/articles/hdinsight-compo
问题内容: 在node.js Lambda函数和Alexa之间对API进行REST调用时遇到问题。我正在使用请求库来进行具有帐户关联技能的呼叫。我仅针对意图设置了一个示例话语,模拟器对此效果很好。 另外,cloudwatch日志显示了来自api端点的200响应代码以及从console.logs到CW的API返回的任何数据。 我猜这与我要求Alexa“发出/讲”的SpeechOutput格式有关?
我找到了一些很好的SO链接(如何从异步回调函数返回值?以及从node.js中的回调函数返回值等),但它们并不是不能为我的问题提供解决方案。 我的问题:能够得到异步调用的结果,但我如何使用这个结果返回我的函数? 这里获取callBackResponse的值为true或false,并希望将该值用作:
问题内容: 我刚刚学习(正在学习)函数参数在Python中的工作方式,并且在没有明显原因的情况下开始进行实验: 给出了输出: 哪里来的?还有,这是什么? 问题答案: 它是函数的返回值,您可以将其打印出来。如果没有语句(或者只是没有参数的),则将隐式添加到函数的末尾。 您可能想返回函数中的值,而不是打印它们:
问题内容: 我试图在postgres函数内返回查询结果。我尝试了一下,并完美地工作了: 问题是我需要一些东西来返回以下结果: 我需要什么回报,或者应该改变什么才能实现这一目标? 问题答案: 这可以通过一个简单的SQL函数来完成: 可以在手册中找到更多详细信息和示例:http : //www.postgresql.org/docs/current/static/xfunc-sql.html#XFUN