|
2012年6月6日
2012.09.19 office for mac 2011更新到14.2.4版本,最大的变化就是解决了office在pro retina中的显示问题。 检查并安装更新到14.2.4之后,我的retina中office的显示完全OK了. 这是office for mac team的官方声明链接link. 这是网上关于升级到14.2.4之后仍然无效的解决方法的链接link2.
并集:Set1 union Set2 交集:Set1 intersect Set2
正确语句 1 update jytuser set userid=(select member.userid from member where member.id=jytuser.owner_id) 有2个易错点: 1)表自关联好像行不通。我猜想会不会和查询时建立的索引更改有关。 2)这种写法postgres不支持 1 update jytuser,member set jytuser.userid=member.userid where jytuser.owner_id=jmember.id and jytuser.userid=0; 报错如下:
最近在做数据同步的项目,过程中接触了spring+jdbc的开发模式(IDE: sts),然后开始使用maven管理项目。目前碰到的一个问题是在本地添加一个repository,加的是用于连接sqlserver的驱动包sqljdbc4.jar。我在很多maven仓库里都没找到这个jar,只能手动的下载来,然后添加到本地仓库里。发现这个包好像很多人没有添加成功,我在这里找到了解决方法http://claude.betancourt.us/add-microsoft-sql-jdbc-driver-to-maven/。 主要步骤如下: 1. 本地下载sqljdbc4.jar 2. 解压到本地文件夹中,并找到sqljdbc4.jar路径 3. 打开命令窗口,执行以下语句(前提:先配置好maven环境变量) 1 C:\Users\nbxyz>mvn install:install-file -Dfile=e:\sqljdbc4.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar 4."BUILD SUCCESS"即添加成功
生成的pom文件如下 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4 <modelVersion>4.0.0</modelVersion> 5 <groupId>com.microsoft.sqlserver</groupId> 6 <artifactId>sqljdbc4</artifactId> 7 <version>4.0</version> 8 <description>POM was created from install:install-file</description> 9 </project>
1 private static Map<String, Long> getPictureHeightAndWidthMap(String picUrl) { 2 Map<String, Long> map = new HashMap(); 3 try { 4 URL url = new URL(picUrl); 5 HttpURLConnection connection = (HttpURLConnection) url 6 .openConnection(); 7 DataInputStream in = new DataInputStream( 8 connection.getInputStream()); 9 BufferedImage image = ImageIO.read(in); 10 map.put("w", image.getWidth() * 1L); 11 map.put("h", image.getHeight() * 1L); 12 connection.disconnect(); 13 in.close(); 14 } catch (IOException e) { 15 e.printStackTrace(); 16 } 17 return map; 18 } 19 20 public static Long getHeight(String picUrl) { 21 Map<String, Long> map = getPictureHeightAndWidthMap(picUrl); 22 return null == map.get("h") ? 0 : map.get("h"); 23 } 24 25 public static Long getWidth(String picUrl) { 26 Map<String, Long> map = getPictureHeightAndWidthMap(picUrl); 27 return null == map.get("w") ? 0 : map.get("w"); 28 }
Do "Show package contents" on the Eclipse.app. Edit Contents/Info.plist. Just above </dict> </plist> Place this: <key>NSHighResolutionCapable</key> <true/> Then, log out or make a copy of the app so that OSX will notice the change. Now, the info window will not show "Open in Low Resolution" as checked. Launch Eclipse and enjoy your new retina awesomeness.
solution from https://bugs.eclipse.org/bugs/show_bug.cgi?id=382972
同样的方法也可以解决的软件有:Spring tool suites.
1 首先查看PATH 命令:$PATH 2 如何设置PATH 命令:echo "export PATH=xxxxxx:$PATH" >> ~/.bash_profile 解释:把"export PATH=xxxxxx:$PATH"输出打印到~/.bash_profile中去。 3 Unix知识补充:~/.bash_profile介绍 mac和linux终端一般用bash来进行解析。当bash在读完了整体环境变量的/etc/profile并借此调用其他配置文件后,接下来则是会读取用户自定义的个人配置文件。bash读取的文件总共有三种: ~/.bash_profile ~/.bash_login ~/.profile 其实bash再启动是只读上面文件的一个,而读取的顺序则是依照上面的顺序。也就是说读到bash_profile就不读后面的了,如果bash_profile不存在,后面的才能有机会。 让我们来看看bash_profile里面有什么内容: 命令:cat ~/.bash_profile 最后重启你的终端就会有刚才设置的全局变量了。 【2012.02.28更新】 最直观的方法是: cd ~ open .bash_profile 这时候就会直接用记事本程序打开这个配置文件,比在终端里那么设置要简单直观多了。 要注意一点那就是配置文件里的变量是会覆盖的,比如 export PATH=1 export PATH=2 那么后面的2会把前面的1覆盖的。
hibernate默认的,以及网络上的主流支持left join的表关系是one-to-many的,可以使用left join fetch(需要配置lazy="true" fetch="select"),也可以使用Criteria或者CriteriaQuery(link1 link2)来进行查询。 对于many-to-one,首先我们先建两个model: @Entity public class ClassOne { public String id; public boolean isDeleted; } @Entity public class ClassTwo { public String id; @ManyToOne public ClassOne classOne; // 父表 public boolean isDeleted; } 目前有两个需求: (1)select a.id,b.id from ClassTwo as b left join b.classOne as a;【正确,获取到了所有ClassOne表的数据项】 (2)select a.id,count(b.id) from ClassTwo as b left join b.classOne as a where a.isDeleted=false and b.isDeleted=false group by a.id;【count结果中把0的滤去了,没达到我的需求】 对于第二种,目前我还没找到具体的解决方法,仍需研究。
outer-join fetch lazy 主键表class 检索策略 检索方式 true/false/auto select false true/false 立即检索(n+1次查询) 所有 - - no-proxy/proxy true 延迟检索 所有 - - - false 立即检索(n+1次查询) 所有 - join false true/false inner join QBC,get()/load() - - - - 立即检索(n+1次查询) HQL,NativeSQL - join no-proxy/proxy false inner join QBC,get()/load() - - - - 立即检索(n+1次查询) HQL,NativeSQL - - - true inner join QBC,get()/load() - - - - 延迟检索
String hql = "select t,count(tp) from ContentTag_Post as tp left join fetch tp.tag as t" + " where tp.tag=t and t.owner.id=? " + " and tp.isDeleted=false and t.isDeleted=false " + " group by t order by t.createTime desc ";
String hql = "select t,count(tp) from ContentTag as t left join ContentTag_Post as tp " + " where t.owner.id=? and t=tp.tag " + " and t.isDeleted=false and tp.isDeleted=false " + " group by t order by t.createTime desc ";
Path expected for join! 2012-08-22 12:47:37 [ERROR] Invalid path: 'tp.tag' right-hand operand of a binary operator was null <AST>:0:0: unexpected end of subtree left-hand operand of a binary operator was null
select查询 join查询
@LazyToOne用法 http://docs.jboss.org/hibernate/annotations/3.4/reference/zh_cn/html/entity.html Java中的transient,volatile和strictfp关键字 http://www.iteye.com/topic/52957 transient Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的
class A implements Serializable { private String name; transient private String address; }
那么你在串行化(IO流等)A类时 给它的name和address属性赋值,那么你在提取A时,拿到了name属性,但是却拿不到address属性。
lazy是延时的意思,如果lazy=true,那么就是说数据库中关联子表的信息在hibernate容器启动的时候不会加载,而是在你真正的访问到字表非标识字段的时候,才会去加载。 反之,如果lazy=false的话,就是说,子表的信息会同主表信息同时加载。 一般用只有完全用到子表信息的时候,才会lazy=false
join 查询的时候,是用以条语句查处所有记录,包括关联表记录,select查出的是N+1条记录,两个都是差不多的,但是如果用了lazy=true,延迟加载的话,select在查询时只会查出主表记录,也就是1,如果其他地方也用到了数据,此时就会自动在执行查询,查出N,可以降低内存消耗 .还有,hibernate是的session是轻量级的,创建和销毁都不花很多资源,查询数据也很快,这里fetch主要起这个作用
Path expected for join! unexpected end of subtree
使用条件如下: a left join b a must be b's parent
突然抛了一个concurrentModificationException错误,Iterator的一个基本概念没有掌握导致的这个错误,就是在Iterator的实现类。比如Hashtable里面的内部类 private class Enumerator<T> implements Enumeration<T>, Iterator<T> 会在next,或者remove的时候检查当前集合是否会在修改状态,如果是的话,就会抛出 ConcurrentModificationException,而他自己remove则是使用了同步的方法,而且同步了modCount;expectedModCount; 1 public T next() { 2 if (modCount != expectedModCount) 3 throw new ConcurrentModificationException(); 4 return nextElement(); 5 } 6 7 8 public void remove() { 9 if (!iterator) 10 throw new UnsupportedOperationException(); 11 if (lastReturned == null) 12 throw new IllegalStateException("Hashtable Enumerator"); 13 if (modCount != expectedModCount) 14 throw new ConcurrentModificationException(); 15 16 synchronized(Hashtable.this) { 17 Entry[] tab = Hashtable.this.table; 18 int index = (lastReturned.hash & 0x7FFFFFFF) % tab.length; 19 20 for (Entry<K,V> e = tab[index], prev = null; e != null; prev = e, e = e.next) { 22 if (e == lastReturned) { 23 modCount++; 24 expectedModCount++; 25 if (prev == null) 26 tab[index] = e.next; 27 else 28 prev.next = e.next; 29 count--; 30 lastReturned = null; 31 return; 32 } 33 } 34 throw new ConcurrentModificationException(); 35 } 36 } 37 } 而自己在next的同时,修改了这个集合,导致了这个错误的出现 在Map或者Collection的时候,不要用它们的API直接修改集合的内容,如果要修改可以用Iterator的remove()方法,例如: 1 public void setReparation( Reparation reparation ) { 2 for (Iterator it = this.reparations.iterator();it.hasNext();){ //reparations为Collection 3 Reparation repa = (Reparation)it.next(); 4 if (repa.getId() == reparation.getId()){ 5 this.reparations.remove(repa); 6 this.reparations.add(reparation); 7 } 8 } 9 } 如上写会在运行期报ConcurrentModificationException,可以如下修改: 1 public void setReparation( Reparation reparation ) { 2 boolean flag = false; 3 for (Iterator it = this.reparations.iterator();it.hasNext();){ //reparations为Collection 4 Reparation repa = (Reparation)it.next(); 5 if (repa.getId() == reparation.getId()){ 6 it.remove(); 7 flag = true; 8 break; 9 } 10 } 11 if(flag){ 12 this.reparations.add(reparation); 13 } 14 } 原文摘自 alreal
API语法:
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
public static final String separator
public static final char separatorChar
与系统有关的默认名称分隔符。此字段被初始化为包含系统属性 file.separator 值的第一个字符。在 UNIX 系统上,此字段的值为 '/' ;在 Microsoft Windows 系统上,它为 '\\' 。
注意:
路径名字符串与抽象路径名之间的转换与系统有关。将抽象路径名转换为路径名字符串时,每个名称与下一个名称之间用一个默认 分隔符 隔开。默认名称分隔符由系统属性 file.separator 定义,可通过此类的公共静态字段 separator
和 separatorChar
使其可用。将路径名字符串转换为抽象路径名时,可以使用默认名称分隔符或者底层系统支持的任何其他名称分隔符来分隔其中的名称。 例如,我希望的文件绝对路径是E:\dev\workspace\iclass_web/conf/filterconfig.xml(计作myPath),有两种创建File的形式:
1)new File(myPath)不会报错;
2)new File("E:\dev\workspace\iclass_web/conf/filterconfig.xm")报错,应修改为new File("E:\\dev\\workspace\\iclass_web/conf/filterconfig.xml"
我的系统是windows32位,io.File的一个字段FileSystem是一个抽象类,FileSystem被一个Win32FileSystem类继承,从而实现里面的public abstract String normalize(String path);方法。
Win32FileSystem部分源码如下:
1 private final char slash;
2 private final char altSlash;
3 private final char semicolon;
4
5 public Win32FileSystem() {
6 slash = ((String) AccessController.doPrivileged(
7 new GetPropertyAction("file.separator"))).charAt(0);
8 semicolon = ((String) AccessController.doPrivileged(
9 new GetPropertyAction("path.separator"))).charAt(0);
10 altSlash = (this.slash == '\\') ? '/' : '\\';
11 }
12
13 private boolean isSlash(char c) {
14 return (c == '\\') || (c == '/');
15 }
16
17 private boolean isLetter(char c) {
18 return ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
19 }
20
21 private String slashify(String p) {
22 if ((p.length() > 0) && (p.charAt(0) != slash)) return slash + p;
23 else return p;
24 }
25
26 /* Check that the given pathname is normal. If not, invoke the real
27 normalizer on the part of the pathname that requires normalization.
28 This way we iterate through the whole pathname string only once. */
29 public String normalize(String path) {
30 int n = path.length();
31 char slash = this.slash;
32 char altSlash = this.altSlash;
33 char prev = 0;
34 for (int i = 0; i < n; i++) {
35 char c = path.charAt(i);
36 if (c == altSlash)
37 return normalize(path, n, (prev == slash) ? i - 1 : i);
38 if ((c == slash) && (prev == slash) && (i > 1))
39 return normalize(path, n, i - 1);
40 if ((c == ':') && (i > 1))
41 return normalize(path, n, 0);
42 prev = c;
43 }
44 if (prev == slash) return normalize(path, n, n - 1);
45 return path;
46 }
Hibernate中使用COUNT DISTINCT关键字: Hibernate在Hibernate中, 计算某列非重复记录的总数, 使用COUNT + DISTINCT 在MySQL中,可以使用 sql 代码 - select COUNT(DISTINCT(name)) from products
但在Hibernate中却不能用如下格式 - select COUNT(DISTINCT(name)) from ProductDTO
需要把里面的括号去掉, 改成 - select COUNT(DISTINCT name ) from ProductDTO
在MySQL中也可以使用这种样式.
报错现象 Oops: JPAQueryException An unexpected error occured caused by exception JPAQueryException: Error while executing query select t from TurnedIn t, Notification n where n.itemId=t.id and n.type=? and n.receiver.id=? and n.isDeleted=false group by t order by t.createTime desc: org.hibernate.type.SerializationException: could not deserialize ... Caused by: java.io.InvalidClassException: models.member.Member; local class incompatible: stream classdesc serialVersionUID = 8996579512119659486, local class serialVersionUID = -7513555048418418149 异常原因 本地和远程的member序列化后的serialVersionUID不 解决方法 将本地的序列化的类中的版本号(serialVersionUID )改成和远程中一样,在本地的序列化类里的private static final long serialVersionUID = 改成远程的就行了,如果没有的话就加上这句。 关于“org.hibernate.type.SerializationException: could not deserialize”,我查了很多的资料,大概有以下几个原因:
1.该类的序列版本号与从流中读取的类描述符的版本号不匹配(jdk版本更换会造成这个问题) 2.该类包含未知数据类型(hibernate配置文件中未指定数据类型) 3.该类没有可访问的无参数构造方法
pgSql
语法 to_number(text, text)
例子 select to_number(trim(both 'ibs' from classname), '999999') as cn from bbs order by cn /*trim(both 'ibs' from classname)去除classname字段中的'ibs'字符*/
mySql
语法 str*1 / str+1 / -str /*str为varchar的数字,此处不一定是1,只要是数字即可*/
hql
语法 to_number(text, text)
例子 select b from BBS b where b.isDeleted=false order by to_number(trim(both 'ibs' from b.className), '999999')
pgSql数据类型格式化函数
order by isTop desc
默认false在前;按desc,true在前
在push之前有时候会不放心是不是忘记加某些文件,或者是不是多删了个什么东西,这时候希望能够看看上次commit都做了些什么。
一开始想到的是用git diff,但是git diff用于当前修改尚未commit的时候较为方便,一旦commit后,需要指定上次节点的名称(一个hash值),不方便。这种时候用git log更合适,因为commit的内容会以log来记录。
下面记录几个常用的情境以及对应的命令。
仅仅想看最近谁有提交,以及提交的描述
对应命令 git log
显示Sample
commit 6305aa81a265f9316b606d3564521c43f0d6c9a3
Author: XXX
Date: Thu Nov 3 11:38:15 2011 +0800
fill author information in the head of files and format some code
commit 8e8a4a96e134dab8f045937efee35bd710006946
Author: XXX
Date: Thu Nov 3 04:05:34 2011 +0800
user management is mostly complete
details:
add support for account disable/enable
rewrite most related views to suit the above need
provide two decorators for access control (see README)
fixed many errors in Milestone 1
commit 2870cd564371d8ad043d0da426a5770d36412421
Author: XXX
Date: Mon Oct 17 20:19:04 2011 -0400
fix the bug of get_ori_url_from_shorturl().
commit b6cdd881a19ecaff838d5825c3a6b7058fdd498a
Author: XXX
Date: Mon Oct 17 20:17:37 2011 -0400
fix the bug of get_article_from_short_url.
仅仅想看最后一次的提交
对应命令参数 -n 1
显示Sample
commit 6305aa81a265f9316b606d3564521c43f0d6c9a3
Author: XXX
Date: Thu Nov 3 11:38:15 2011 +0800
fill author information in the head of files and format some code
想看到最近一次提交所有更改过的文件
对应命令 git log -n 1 --stat
显示Sample
commit 6305aa81a265f9316b606d3564521c43f0d6c9a3
Author: XXX
Date: Thu Nov 3 11:38:15 2011 +0800
fill author information in the head of files and format some code
Site/accounts/decorators.py | 2 +-
Site/accounts/forms.py | 1 +
Site/accounts/models.py | 1 +
Site/accounts/readme | 3 ++-
Site/accounts/templates/account_activate.html | 1 +
Site/accounts/templates/account_disabled.html | 1 +
…
…
28 files changed, 37 insertions(+), 8 deletions(-)
想看到最近一次提交所有更改的细节
对应命令 git log -n 1 -p
显示Sample
commit 6305aa81a265f9316b606d3564521c43f0d6c9a3
Author: XXX
Date: Thu Nov 3 11:38:15 2011 +0800
fill author information in the head of files and format some code
diff --git a/Site/accounts/decorators.py b/Site/accounts/decorators.py
index 22522bc..a6bb440 100755
--- a/Site/accounts/decorators.py
+++ b/Site/accounts/decorators.py
@@ -1,9 +1,9 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# author: Rex Nov. 3, 2011
from functools import wraps
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
-from django.utils.decorators import available_attrs
from Site.accounts.models import UserProfile
def login_required(view_func):
diff --git a/Site/accounts/forms.py b/Site/accounts/forms.py
index 016710b..778d92a 100755
--- a/Site/accounts/forms.py
+++ b/Site/accounts/forms.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# author: Rex Nov. 3, 201
…
…
有了这几条命令,基本上对于想看最近更改的情境就可以应付过去了。最后一条并不很常用,如果有visual的工具可能更直观些。
原文转自git使用点滴
Onunload,onbeforeunload都是在刷新或关闭时调用,可以在<script>脚本中通过window.onunload 来指定或者在<body>里指定。区别在于onbeforeunload在onunload之前执行,它还可以阻止onunload的执行。
Onbeforeunload也是在页面刷新或关闭时调用,Onbeforeunload是正要去服务器读取新的页面时调用,此时还没开始读取;而 onunload则已经从服务器上读到了需要加载的新的页面,在即将替换掉当前页面时调用。Onunload是无法阻止页面的更新和关闭的。而 Onbeforeunload 可以做到。曾经做一个考试系统,涉及到防止用户半途退出考试(有意或者无意),代码如下: <body onbeforeunload=" checkLeave()"> <script> function checkLeave(){ event.returnValue="确定放弃考试?(考试作废,不记录成绩)"; } </script> 这样可以让用户确认是否要退出考场,其实BLOGJAVA在用户编写BLOG时,如果不保存而跳转到其他页面,也会有一个确认的提示(防止误操作),也是用到Onbeforeunload。
另外还可以用来在页面关闭的时候关闭session,代码如下(注:用window.screenLeft > 10000 来区分关闭和刷新操作): <body onbeforeunload=" closeSession()"> <script> function closeSession (){ //关闭(刷新的时候不关闭Session) if(window.screenLeft>10000){ //关闭Session的操作(可以运用AJAX) } } </script> 文章摘自 blogJava
问题描述:firefox下js中动态组装select时指定option的selected属性的失效 有问题的代码如下: 1 // 加载select列表 2 var teaOption ='', ownerSel = $("ownerSel"); 3 for(var i = 0; i < teaList.length; i ++){ 4 var teacher = teaList[i]; 5 if(teacher.isDeleted === false){ 6 var tid = teacher.id, tName = teacher.fullName, newOption; 7 var flag = ((tid === formerOwnerId) ? 'selected="selected"' : ''); 9 teaOption += '<option value="'+tid+'" '+ flag +'>'+ tName +'</option>'; 10 } 11 } 12 ownerSel.html(teaOption); 此时selected属性无效,ff中的select显示的是option列表的最后一个。 原因貌似是这样子: selected这个属性本身是没有错的,你在页面开始加载的前写好,然后浏览器加载的时候就会读取这个dom,然后有selected这个效果。 但是通过js动态组装的select的html代码,在ie下我刚刚试了下可行(我刚刚失败的原因是三目运算符处少加了一个括号);firefox下,在请求加载的同时加载dom元素,但是ff内核可能是为了追求速度,而省略了一些dom的属性的加载,导致了selected这个属性的失效。
解决方法(我用的是mootools):在加载的时候将option元素通过如下解决
1 // 加载select列表 2 var ownerSel = $("ownerSel"); 3 for(var i = 0; i < teaList.length; i ++){ 4 var teacher = teaList[i]; 5 if(teacher.isDeleted === false){ 6 var tid = teacher.id, tName = teacher.fullName, newOption; 7 if(tid === formerOwnerId) 8 newOption = new Element('option', {"value" : tid, "selected" : "selected"}).html(tName); 9 else 10 newOption = new Element('option', {"value" : tid}).html(tName); 11 ownerSel.grab(newOption); // 将新的element插入到select中 12 } 13 }
错误 org.hibernate.HibernateException: ordinal parameter mismatch 。 我的错误是未将hql语句设置参数时的占位符去掉(粗糙流了下- -///)
1 hql += " and bbs.id=? " + bbs.id; 在这之前网上发现的另一种错误也很值得注意:在数据表中用了关键字“call” 作为数据字段,所以产生了这个问题。Hibernate报错如下: org.hibernate.HibernateException: ordinal parameter mismatch at org.hibernate.engine.query.HQLQueryPlan.buildParameterMetadata(HQLQueryPlan.java:225) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:95) at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54) at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71) at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133) at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112) at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583) ...... 出错的原因是在org.hibernate.engine.query.ParameterParser类中有下列一段代码
1 public static void parse(String sqlString, Recognizer recognizer) throws QueryException{ 2 boolean hasMainOutputParameter = sqlString.indexOf( "call" ) > 0 && 3 sqlString.indexOf( "?" ) < sqlString.indexOf( "call" ) && 4 sqlString.indexOf( "=" ) < sqlString.indexOf( "call" ); 5 ...... 6 } 我们都知道hibernate3可以调用存储过程或函数,但是有一定的限制(具体可以查看hibernate官方手册)。 据我分析这段代码应该是用来分析字符串是否是调用存储过程或函数的语句。 解决方法: 1.不要在表或列中,出现"call"字样 2.用Criteria来代替hql语句
|