我用的eclipse开始好好的,但是后来调试就不稳定了,调试hibernate+spring的时候只能从ac = new FileSystemXmlApplicationContext("/WebRoot/WEB-INF/applicationContext.xml");这列开始调试,而且不能跳跃的调试,不能F8到另一个断点,按了F8就一路跑到底了。只能一步一步的调啊。郁闷死了,开始dao层还可以测试,但是到了Service层,有了事物管理,根本没法调了。把eclipse卸了重装,反复几次,还弄了另一个eclipse过来,还是不行,都是这个样子。但是调普通的Java类这些功能都好好的,难道eclipse不能调试spring+hibernate?在网上搜的时候也看见有人遇到和我相同的问题,但是他们也没解决方案?不会是要重装系统在重装eclipse吧??? :x
[b]问题补充:[/b]
一楼说的都试过了。还是不行。
[b]问题补充:[/b]
:cry: 问题是现在急着做项目啊。都弄的我半天才能调一个bug,还是用System.out.println()调的。都米人知道了么?
[b]问题补充:[/b]
大家说的方法都试了,最后实在不行,只能拿出MyEclipse了,JDK还是1.6的,哎,终于可以调试了,那叫一个爽啊。我现在是开发用eclipse,调试用MyEclipse。呵呵。不知道是不是wocsok老兄说的多线程问题,但是MyEclipse是可以的。
还有spring的事物加了之后老是遇到一些莫名其妙的问题,去掉事物代理运行成功,但是一加事物代理,则莫名其妙的异常了。举个例子给大家吧,不知道有人遇到类似问题没?如果嵌套超过一层,那我的save方法就变成update了(当然我传的实体是带ID的,但是单独测save还是save,就是不能嵌套),还有在事务中查出来的实体不让我改ID,改了就异常,郁闷。把事物配置发出来看看。
<!-- 定义事务拦截器 -->
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<!-- 注入事务管理 -->
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<!-- 定义事务传播属性 -->
<props>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
<property name="beanNames">
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<value>*Service</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property name="interceptorNames">
<list>
<!-- 此处可增加其他新的Interceptor -->
<value>transactionInterceptor</value>
</list>
</property>
</bean>
[b]问题补充:[/b]
呵呵,有几位兄台没看清我的说明哦,我开始已经说了,重装过eclipse。而且换了其他好的eclipse重装。都没用。算了,不能调试我就用MyEclipse。
至于595755330提出的问题我觉得spring和hibernate不调试的话怎么知道里面在怎么运行?我的事物配置并没有错,今天用MyEclipse调试的时候终于发现为什么我的save方法变update了,在hibernate的save方法里面会根据是否有事物层层调用,当走到StatefulPersisitentContext()时,会根据它的entityEntyies属性得到当前event的entry,而entityEntyies是IdentityMap类型,里面存着有id的实体和无id实体的映射,最后save的时候是根据映射关系返回entry中的id。所以我的save变update了。看了映射关系是根据内存地址映射的,没办法啊,因为我是复制数据,所以只能先查出实体,再将属性值赋给一个新变量,在save新变量。很麻烦啊,因为我一次要复制很多数据,不知道哪位兄弟遇到类似的问题了,一起交流下吧。