spring.xml
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.aq.osgi.mdm.beans</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<aop:aspectj-autoproxy />
<tx:annotation-driven transaction-manager="transactionManager"/>
<context:component-scan base-package="com.aq.osgi.mdm">
<context:exclude-filter type="regex" expression=".*Controller$" />
</context:component-scan>BaseDAO.java
public abstract class BaseDAO extends HibernateDaoSupport{
@Resource(name = "sessionFactory")
public void getHibernateSession(SessionFactory sessionFactory)
{
setSessionFactory(sessionFactory);
}
protected void delete(Object object)
throws CurrentlyException
{
try
{
this.getHibernateTemplate().delete(object);
}
catch (HibernateException he)
{
....
}
}
protected Object load(Class<?> clazz, Serializable id)
throws CurrentlyException
{
Object returnObject = null;
try
{
// 操作数据库返回操作结果
returnObject = this.getHibernateTemplate().load(clazz, id);
}
catch (Exception ex)
{
.....
}
return returnObject;
}
}还有个dao调用(dao我是用@Repository注入的)
public class MyDAO extends BaseDAO{
public void delete(MyObject obj){
delete(obj)
}
public MyObject loadObj(Class clz,Long id){
return (MyObject)load(clz,id)
}
}service注入dao
public class MyServiceImpl implements IMyService{
@Resource
private MyDAO myDAO;此处注解似乎无效,仍然抛出异常,说有2个session ------ >@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void test(MyObject obj){
obj = myDAO.loadObj(obj.class,obj.getId());
myDAO.delete(obj)
}
}
望高手赐教!!!!!!!!!!!
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.aq.osgi.mdm.beans</value>
</list>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<aop:aspectj-autoproxy />
<tx:annotation-driven transaction-manager="transactionManager"/>
<context:component-scan base-package="com.aq.osgi.mdm">
<context:exclude-filter type="regex" expression=".*Controller$" />
</context:component-scan>BaseDAO.java
public abstract class BaseDAO extends HibernateDaoSupport{
@Resource(name = "sessionFactory")
public void getHibernateSession(SessionFactory sessionFactory)
{
setSessionFactory(sessionFactory);
}
protected void delete(Object object)
throws CurrentlyException
{
try
{
this.getHibernateTemplate().delete(object);
}
catch (HibernateException he)
{
....
}
}
protected Object load(Class<?> clazz, Serializable id)
throws CurrentlyException
{
Object returnObject = null;
try
{
// 操作数据库返回操作结果
returnObject = this.getHibernateTemplate().load(clazz, id);
}
catch (Exception ex)
{
.....
}
return returnObject;
}
}还有个dao调用(dao我是用@Repository注入的)
public class MyDAO extends BaseDAO{
public void delete(MyObject obj){
delete(obj)
}
public MyObject loadObj(Class clz,Long id){
return (MyObject)load(clz,id)
}
}service注入dao
public class MyServiceImpl implements IMyService{
@Resource
private MyDAO myDAO;此处注解似乎无效,仍然抛出异常,说有2个session ------ >@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void test(MyObject obj){
obj = myDAO.loadObj(obj.class,obj.getId());
myDAO.delete(obj)
}
}
望高手赐教!!!!!!!!!!!
解决方案 »
- github报错Permission denied (publickey),求帮助
- c:foreach动态传值的问题
- LifecycleException: Coyote connector has not been started
- 静态代理与动态代理的区别??
- hibernate连接oracle
- 求基本电子书,有的请发给我,谢谢!
- DTD爲什麽是錯誤的呢?
- 求助!dhtml的分页问题。
- 指定资源下载失败,高手请帮忙啊,困扰我半个多月了!
- struts2 下载jsp 利用Content-Disposition
- 一个 重网上下的 项目 说是java项目还用浏览器 看 说是web项目还 导入不进myEclipse 还没有webRoot
- eclipse汉化问题啊
You can use MyDAO only (extends HibernateDaoSupport), your problem will be solved. Like followings:public class MyDAO extends HibernateDaoSupport{
-----------
}
public interface SomeService {
public void doSomeThing();
}这样,在服务层事务就会以默认方式开启。
所谓默认方式。设计到
事务隔离级别
事务的传播性质
事务是否为只读具体每项到底什么含义,你可以参考spring或者JTA的文档。
public class MyDAO extends BaseDAO{
^^^^^^
}在MyDAO的set方法上注入
@Resource(name = "MyDAO")
public class MyServiceImpl implements IMyService{ private MyDAO myDAO; @Resource
public void setMyDAO(MyDAO myDAO) {
this.myDAO = myDAO;
}
}
此处的dao注入sevice如上楼所言,注入的概念就是dao的实例化工作交给spring容器来实现,然后需要把实例化的dao对象交给service,但是你之前的代码只是声明了dao属性,service其他方法调用这个属性时会发现找不到它的实例化对象,所以需要set方法来封装它。注解是注在set方法上,相关其他详细解释可查询spring源码或者文档。test 中两个session需要你重新改写test代码。因为看不到你全部代码。