使用Hibernate调用存储过程(Call stored procedure with Hibernate)
我想用hibernate从PostgreSQL调用存储过程。 但是,如果我通过entitymanager.getResultList调用此过程,它将返回一个具有奇怪属性名称的对象列表。 程序:
CREATE OR REPLACE FUNCTION public.show_top10() RETURNS SETOF users AS $BODY$ SELECT * FROM users ORDER BY message_count DESC LIMIT 10; $BODY$ LANGUAGE sql VOLATILE;
用户的属性:
private Integer id; private String login; private String password; private Timestamp dateCreated; private Long messageCount; private Integer role; private Collection<Message> messagesById;
呼叫:
List<Users> result = null; StoredProcedureQuery storedProcedureQuery= entityManager.createStoredProcedureQuery("show_top10"); storedProcedureQuery.execute(); result = storedProcedureQuery.getResultList(); entityManager.getTransaction().commit();
结果:
I want to call stored procedure from PostgreSQL with hibernate. But, if i call this procedure throught entitymanager.getResultList, it's return me a list of objects with strange names of attributes. Procedure:
CREATE OR REPLACE FUNCTION public.show_top10() RETURNS SETOF users AS $BODY$ SELECT * FROM users ORDER BY message_count DESC LIMIT 10; $BODY$ LANGUAGE sql VOLATILE;
User's atributes:
private Integer id; private String login; private String password; private Timestamp dateCreated; private Long messageCount; private Integer role; private Collection<Message> messagesById;
Calling:
List<Users> result = null; StoredProcedureQuery storedProcedureQuery= entityManager.createStoredProcedureQuery("show_top10"); storedProcedureQuery.execute(); result = storedProcedureQuery.getResultList(); entityManager.getTransaction().commit();
And result:
原文:https://stackoverflow.com/questions/29327866
更新时间:2023-08-03 12:08
最满意答案
你必须做一个小的修改
for (i in 1:5) { rm(list = paste("query",i,sep = "")) }
You have to make a small modification
for (i in 1:5) { rm(list = paste("query",i,sep = "")) }
相关问答
更多-
您需要直接使用迭代器,并通过该迭代器移除项目。 for (Iterator
iterator = list.iterator(); iterator.hasNext(); ) { String fruit = iterator.next(); if ("banane".equals(fruit)) { iterator.remove(); } System.out.println(fruit); } You need to use the i ... -
来自help(exists) : 如果inherits为TRUE且在指定环境中未找到x的值,则会搜索环境的封闭框架,直到遇到名称x 。 命名变量时要小心。 您与基本函数c()发生冲突。 由于inherits = TRUE是默认值,因此会搜索封闭环境,在这种情况下会找到基函数c() ,从而生成TRUE结果。 因此,要仅搜索环境e然后退出,请使用inherits = FALSE 。 exists("c", envir = e, inherits = FALSE) # [1] FALSE From help(e ...
-
为了在迭代过程中安全地从集合中删除,您应该使用Iterator。 例如: List
names = .... Iterator i = names.iterator(); while (i.hasNext()) { String s = i.next(); // must be called before you can call i.remove() // Do something i.remove(); } 从Java文档 : 该类的迭代器和listI ... -
你必须做一个小的修改 for (i in 1:5) { rm(list = paste("query",i,sep = "")) } You have to make a small modification for (i in 1:5) { rm(list = paste("query",i,sep = "")) }
-
lapply(mget(ls()), dim)就是这样。 lapply(mget(ls()), dim) is the way.
-
代码中没有环境变量,只有shell变量。 Shell变量也可以是环境变量( 导出的变量,如$PATH ,对所有子进程都是可见的,不管它们是否是shell),但这里不是这种情况。 Shell变量名必须与相邻字符区分开来,这些字符可以作为语法合法变量名的一部分,方法是将它们放在{...} - ${i} ,在您的情况下。 除非你特别需要shell 扩展的 shell变量引用(可能嵌入未加引号的标记),特别是分词和通配符,否则请双引号 - "s${i}a" 。 使用算术C样式循环来创建一个具有可变迭代次数的高效内存 ...
-
不,只是你不能。 变量名称应该是静态类型的( 至少没有任何字节码操作 )。 如果您想在稍后使用索引(i)访问它们,请使用array或ArrayList。 No. Simply you cannot. Variables names should be statically typed (at least without any byte code manipulations). If you want to access them with your index (i) later, use array o ...
-
我相信这是因为函数foo()是在定义它的环境中进行评估的。 在您的示例中, foo()在全局环境中定义,因此i不在范围内。 如果你在匿名函数中定义foo() ,那么i似乎被正确评估。 env.g <- environment() invisible(lapply(1, FUN = function(i){ message('global env: exists(i) ', exists('i', envir = env.g)) message('lapply env: exists(i) ', ex ...
-
我认为这种类型的错误很常见,请尝试执行以下操作: cmds.duplicate('solitude'+str(i)) This type of error I think is common, try do the following: cmds.duplicate('solitude'+str(i))
-
要从名称中返回实际数据框,而不仅仅是名称本身,请使用get 。 如在 writeWorksheet(wb, data = get(dataframe_list[k]), sheet=as.character(dataframe_list[k]), startRow = 49, startCol = 3, header = FALSE) 注意,未经测试,因为这不是一个完整的可重复示例 To return the actual data frame from its nam ...