Struts 2.18 + Spring2.5 + Hibernate 3.2 applicationContent.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-lazy-init="true">
<!--数据源配置--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.1.103:1521:think</value>
</property>
<property name="username">
<value>iDocer</value>
</property>
<property name="password">
<value>stuibm</value>
</property>
<property name="maxActive">
<value>255</value>
</property>
<property name="maxIdle">
<value>2</value>
</property>
<property name="maxWait">
<value>120000</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
<property name="packagesToScan">
<list>
<value>com.idoc.**.model</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
<context:component-scan base-package="com.idoc,com.doc.*" />
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean> </beans>package com.idoc.common.dao;import java.io.Serializable;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;/**
* DAO基类
*
* @author Administrator
*
*/
@Repository
public class BaseHibernateDao extends HibernateDaoSupport {
/**
* 得到session
*
* @return
*/
public Session findSession() {
return super.getSession();
} /**
* 添加方法
*/
@Transactional
public void save(Object object) {
try {
super.getHibernateTemplate().save(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void save(String name, Object object) {
try {
super.getHibernateTemplate().save(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 删除方法
*/
@Transactional
public void delete(Object object) {
try {
super.getHibernateTemplate().delete(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void delete(String name, Object object) {
try {
super.getHibernateTemplate().delete(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 修改方法
*/
@Transactional
public void update(Object object) {
try {
Session session=this.getSession();
session.clear();
super.getHibernateTemplate().update(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void update(String name, Object object) {
try {
super.getHibernateTemplate().update(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 查询所有方法
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(Class clazz) {
List<T> list = null;
try {
String hql = "from " + clazz.getName();
list = (List<T>) super.getHibernateTemplate().find(hql);
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
} /**
* 根据ID获得实体
*
* @param <T>
* @param clazz
* @param id
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> T findById(Class<T> clazz, Serializable id) {
return (T) super.getHibernateTemplate().get(clazz, id);
} /**
* 根据条件查询所有
*
* @param <M>
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(String hql, Object[] values) {
if (values == null || values.length == 0) {
return super.getHibernateTemplate().find(hql);
} else {
return super.getHibernateTemplate().find(hql, values);
}
} public HibernateTemplate getTemplate() {
return super.getHibernateTemplate();
} @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start, int max) {
Query query = this.getSession().createQuery(hql);
query.setFirstResult(start);
query.setMaxResults(max);
return query.list(); } @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start) {
Query query = this.getSession().createQuery(hql); query.setFirstResult(start); return query.list(); }
}错误信息
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception Unable to instantiate Action, com.idoc.sysset.tree.webapp.TreeAction, defined for 'getTree' in namespace '/'Error creating bean with name 'com.idoc.sysset.tree.webapp.TreeAction': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.idoc.sysset.office.service.TaxoService com.idoc.sysset.tree.webapp.TreeAction.taxoService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'taxoService': Autowiring of methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.idoc.common.service.BaseManager.setDao(com.idoc.common.dao.BaseHibernateDao); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseHibernateDao' defined in file [D:\DevelopmentProgrammes\apache-tomcat-6.0.20\webapps\iDocument\WEB-INF\classes\com\idoc\common\dao\BaseHibernateDao.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:307)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
default-lazy-init="true">
<!--数据源配置--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.1.103:1521:think</value>
</property>
<property name="username">
<value>iDocer</value>
</property>
<property name="password">
<value>stuibm</value>
</property>
<property name="maxActive">
<value>255</value>
</property>
<property name="maxIdle">
<value>2</value>
</property>
<property name="maxWait">
<value>120000</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
<property name="packagesToScan">
<list>
<value>com.idoc.**.model</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
<context:component-scan base-package="com.idoc,com.doc.*" />
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean> </beans>package com.idoc.common.dao;import java.io.Serializable;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;/**
* DAO基类
*
* @author Administrator
*
*/
@Repository
public class BaseHibernateDao extends HibernateDaoSupport {
/**
* 得到session
*
* @return
*/
public Session findSession() {
return super.getSession();
} /**
* 添加方法
*/
@Transactional
public void save(Object object) {
try {
super.getHibernateTemplate().save(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void save(String name, Object object) {
try {
super.getHibernateTemplate().save(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 删除方法
*/
@Transactional
public void delete(Object object) {
try {
super.getHibernateTemplate().delete(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void delete(String name, Object object) {
try {
super.getHibernateTemplate().delete(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 修改方法
*/
@Transactional
public void update(Object object) {
try {
Session session=this.getSession();
session.clear();
super.getHibernateTemplate().update(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void update(String name, Object object) {
try {
super.getHibernateTemplate().update(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 查询所有方法
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(Class clazz) {
List<T> list = null;
try {
String hql = "from " + clazz.getName();
list = (List<T>) super.getHibernateTemplate().find(hql);
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
} /**
* 根据ID获得实体
*
* @param <T>
* @param clazz
* @param id
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> T findById(Class<T> clazz, Serializable id) {
return (T) super.getHibernateTemplate().get(clazz, id);
} /**
* 根据条件查询所有
*
* @param <M>
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(String hql, Object[] values) {
if (values == null || values.length == 0) {
return super.getHibernateTemplate().find(hql);
} else {
return super.getHibernateTemplate().find(hql, values);
}
} public HibernateTemplate getTemplate() {
return super.getHibernateTemplate();
} @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start, int max) {
Query query = this.getSession().createQuery(hql);
query.setFirstResult(start);
query.setMaxResults(max);
return query.list(); } @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start) {
Query query = this.getSession().createQuery(hql); query.setFirstResult(start); return query.list(); }
}错误信息
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception Unable to instantiate Action, com.idoc.sysset.tree.webapp.TreeAction, defined for 'getTree' in namespace '/'Error creating bean with name 'com.idoc.sysset.tree.webapp.TreeAction': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.idoc.sysset.office.service.TaxoService com.idoc.sysset.tree.webapp.TreeAction.taxoService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'taxoService': Autowiring of methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.idoc.common.service.BaseManager.setDao(com.idoc.common.dao.BaseHibernateDao); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseHibernateDao' defined in file [D:\DevelopmentProgrammes\apache-tomcat-6.0.20\webapps\iDocument\WEB-INF\classes\com\idoc\common\dao\BaseHibernateDao.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:307)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
TreeAction注解怎么写的
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;import org.hibernate.mapping.Array;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;import com.googlecode.jsonplugin.annotations.JSON;
import com.idoc.common.webapp.BaseAction;
import com.idoc.sysset.leader.model.Leader;
import com.idoc.sysset.leader.service.leaderManager;
import com.idoc.sysset.office.model.Taxoffice;
import com.idoc.sysset.office.service.TaxoService;
import com.idoc.sysset.office.webapp.TaxoAction;@SuppressWarnings("serial")
@Controller
public class TreeAction extends BaseAction{
@Autowired
private TaxoService taxoService;
@Autowired
private leaderManager ledaerMageager;
List<Taxoffice> ts=new ArrayList<Taxoffice>();
@JSON(name="ts")
public List<Taxoffice> getTs() {
return ts;
}
public void setTs(List<Taxoffice> ts) {
this.ts = ts;
}
//父类的方法 public String getTreeNode()
{
ts=this.taxoService.find();
return "json";
}
//子类的方法 public void getTree() throws IOException
{
List<Taxoffice> ts=new ArrayList<Taxoffice>();
List<Leader> ls=new ArrayList<Leader>();
ts=this.taxoService.find();
ls=this.ledaerMageager.find();
String tB="[";
List<Leader> lea;
for(int i=0;i<ts.size();i++)
{
int code=ts.get(i).getCode();
tB+="{";
tB+="\"cls\":\"folder\",";
tB+="\"id\":\""+ts.get(i).getCode()+"\",";
tB+="\"text\":\""+ts.get(i).getName()+"\",";
lea=this.ledaerMageager.getLeaders(code);
if(lea.size()>0){
tB+="\"leaf\":false,";
tB+="\"children\":[";
for(int y=0;y<lea.size();y++)
{
tB+="{";
tB+="\"cls\":\"file\",";
tB+="\"leaf\":true,";
tB+="\"id\":\""+ls.get(y).getLeaderCode()+"\",";
tB+="\"text\":\""+ls.get(y).getName()+"\"";
if(y==(lea.size()-1)){
tB+="}";
}else{
tB+="},";}
}
tB+="]";
}else{
tB+="\"leaf\":true";
}
if(i==(ts.size()-1)){
tB+="}";
}else{
tB+="},";}
}
tB+="]";
this.getResponse().getWriter().write(tB);
this.getResponse().getWriter().close();
//this.getResponse()
//this.getResponse().getWriter().write(this.getRequest().getRealPath("/iDocument"));
//this.getRequest().getRealPath("/iDocument");
// try{
// File file=new File("/iDocument/jj.jsp");
// OutputStream out=new FileOutputStream(file);
// BufferedWriter rd = new BufferedWriter(new OutputStreamWriter(out,"utf-8"));
// rd.write(tB);
// rd.close();
// out.close();
// }catch(IOException e){
// e.printStackTrace();
// } }
}
struts-tree.xml<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!--Struts Start-->
<struts>
<package name="tree" extends="default" namespace="/" >
<action name="getTree" class="com.idoc.sysset.tree.webapp.TreeAction" method="getTree">
<result name="json" type="json"></result>
</action>
</package>
</struts>struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 国际化 ,用于AJAX -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- struts对象由spring托管 -->
<constant name="struts.objectFactory" value="spring"></constant>
<!-- 根据name自动装配 -->
<constant name="struts.objectFactory.spring.autoWire" value="name"></constant>
<!-- 允许在ActionName中使用 / ,即支持对 */* 的识别 -->
<constant name="struts.enable.SlashesInActionNames" value="true"></constant>
<!-- 访问后缀更改为习惯的do,此处支持多配置,即value="do,action" -->
<constant name="struts.action.extension" value="do"></constant>
<!-- struts标签所使用的theme,默认为xhtml,这里使用simple -->
<constant name="struts.ui.theme" value="simple"></constant>
<package name="default" extends="struts-default">
<!-- 增加result类型,支持json格式数据返回 -->
<result-types>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<!-- json拦截器 --><!--
<interceptors>
<interceptor name="logs" class="com.idoc.sysset.syslog.webapp.MyInterceptor" />
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
<interceptor-stack name="defau">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="logs"/>
<interceptor-ref name="json"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defau" />
--></package>
<include file="com/idoc/**/struts*.xml"></include>
</struts>
import java.util.ArrayList;
import java.util.List;import org.springframework.stereotype.Service;
import com.idoc.common.service.BaseManager;
import com.idoc.sysset.office.model.Taxoffice;@Service
public class TaxoService extends BaseManager<Taxoffice> {
public List<Taxoffice> findoffices()
{
return this.find();
}
public List<Taxoffice> getTaxoCode(String name)
{
String sql="from Taxoffice as t where t.name=?";
return this.find(sql, new Object[]{name});
}
public List<Taxoffice> getAll(int start,int max){
List<Taxoffice> list=new ArrayList<Taxoffice>();
String hql=" from Taxoffice ";
list=this.getDao().que(hql, start, max);
return list;
};
public List<Taxoffice> getTaxo(int code)
{
String sql="from Taxoffice as t where t.code=?";
return this.find(sql,new Object[]{code});
}
}
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;/**
* DAO基类
*
* @author Administrator
*
*/
@Repository
public class BaseHibernateDao extends HibernateDaoSupport {
/**
* 得到session
*
* @return
*/
public Session findSession() {
return super.getSession();
} /**
* 添加方法
*/
@Transactional
public void save(Object object) {
try {
super.getHibernateTemplate().save(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void save(String name, Object object) {
try {
super.getHibernateTemplate().save(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 删除方法
*/
@Transactional
public void delete(Object object) {
try {
super.getHibernateTemplate().delete(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void delete(String name, Object object) {
try {
super.getHibernateTemplate().delete(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 修改方法
*/
@Transactional
public void update(Object object) {
try {
Session session=this.getSession();
session.clear();
super.getHibernateTemplate().update(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void update(String name, Object object) {
try {
super.getHibernateTemplate().update(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
* 查询所有方法
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(Class clazz) {
List<T> list = null;
try {
String hql = "from " + clazz.getName();
list = (List<T>) super.getHibernateTemplate().find(hql);
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
} /**
* 根据ID获得实体
*
* @param <T>
* @param clazz
* @param id
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> T findById(Class<T> clazz, Serializable id) {
return (T) super.getHibernateTemplate().get(clazz, id);
} /**
* 根据条件查询所有
*
* @param <M>
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(String hql, Object[] values) {
if (values == null || values.length == 0) {
return super.getHibernateTemplate().find(hql);
} else {
return super.getHibernateTemplate().find(hql, values);
}
} public HibernateTemplate getTemplate() {
return super.getHibernateTemplate();
} @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start, int max) {
Query query = this.getSession().createQuery(hql);
query.setFirstResult(start);
query.setMaxResults(max);
return query.list(); } @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start) {
Query query = this.getSession().createQuery(hql); query.setFirstResult(start); return query.list(); }
}
里面有个
Struts 2 + Spring 2 + JPA + AJAX例子
很详细 对着参考下
下载之后 进这个页面