上面的查询是返回标量值的,Object类型,也就是从resultset中返回的”裸”数据。
如果使用原生sql语句进行query查询时,hibernate是不会自动把结果包装成实体的。
下面通过加上 addEntity() 让原org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
org.apache.struts2.json.JSONWriter.bean(JSONWriter.java:246)
org.apache.struts2.json.JSONWriter.processCustom(JSONWriter.java:178)
org.apache.struts2.json.JSONWriter.process(JSONWriter.java:168)
org.apache.struts2.json.JSONWriter.value(JSONWriter.java:134)
org.apache.struts2.json.JSONWriter.write(JSONWriter.java:102)
org.apache.struts2.json.JSONUtil.serialize(JSONUtil.java:116)
org.apache.struts2.json.JSONResult.createJSONString(JSONResult.java:196)
org.apache.struts2.json.JSONResult.execute(JSONResult.java:170)
这种问题遇到过两次了,都是在ajax调用action返回json时出现,大概有以下解决方案可以尝试:
1.由于在action中Service层的注入加入了对应的get()和set()方法,返回的json对象会将这个get方法当作实体类的属性来返回,那么删掉service的get()方法就可以了。
2.在action中除了get属性()方法之外,最好不要定义get开头的action方法,否则ajax调用时会执行这个方法。
3.遇到的两次问题分别用前2种方案解决了,在网上搜的时候发现还有一种方案是除了get属性()方法之外在其他getxxx()方法前面加注释@JSON(serialize=false),
如果前2种方案没有解决,可以试试这一种。生查询返回实体对象。