如果这是一个非常基本的问题,请原谅我!
我也不期待免费午餐,也不希望有人想要别人做我的功课
我做了google并阅读有关SO的详细信息,但我真的对此感到困惑
这是我的工作 我只需要简单地进行搜索并从数据库中返回结果
我们正在使用weblogic,因此是一个提供连接的托管环境
我们已经配置了会话工厂详细信息:
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">MYDS</property>
<property name="show_sql">true</property>
<property name="default_schema">CLIENT1SCHEMA</property>
</session-factory>
</hibernate-configuration>
在我的spring应用程序上下文中 - 定义了一个sessionFactory和TransactionManager,然后在我的DAO中注入会话工厂
<bean id="sessionFactoryX" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:abc.hibernate.cfg.xml" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactoryX" />
</bean>
<bean id="myCustomDao" class="com.xyz.MyCustomDao" lazy-init="true">
<property name="criteriaConverter" ref="criteriaConverter" />
<property name="sessionFactory" ref="sessionFactoryX" />
</bean>
现在我的dao - 我只是想做一个搜索 - 所以这就是我实现的:
public List<T> findAll(final HashMap param) {
List<T> listData = null;
Criteria subSelectCriteria =null;
try {
Session session=getSessionFactory().getCurrentSession();
subSelectCriteria =session.createCriteria(getType());
} catch (HibernateException e) {
e.printStackTrace();
}
boolean isDistinctQuery=false;
subSelectCriteria.setFirstResult(0);
subSelectCriteria.setMaxResults(100);
List inObjList = subSelectCriteria.list();
if(!inObjList.isEmpty()){
listData = inObjList;
}
return listData;
}
这一切都运行良好,面对与交易管理相关的许多问题后,达到了上述配置 - 我在这里发布了: Transaction Management using Hibernate with weblogic
现在这是我的基本问题: 我没有明确编写的事务管理代码: 既不在我的服务层通过AOP也不在@Transactional
它似乎只是注入了:
org.springframework.orm.hibernate4.HibernateTransactionManager
这是有效的交易管理吗?
我正在尝试实现多租户 - 按照早期的线程 - 但这不是我的问题
由于
答案 0 :(得分:0)
此配置不足以进行正确的tx管理。
为了测试它,我建议你创建一个写操作,它将在你的dao中为每次调用(如当前日期)写入更改数据。
在第一个dao方法调用之前,在服务方法,调试,暂停中对此方法进行两次调用,并使用外部客户端进行选择以查看将要修改的内容。
让spring app调用dao一次,再做一次select。如果该值现在已经改变,如果不使用服务方法,则没有正确的tx管理(当然,在自动提交模式下,您有一个jdbc连接)。