我刚是所有自动生成的dao都没有接口时能向数据库插入数据 但事务会有错 后来把所有的dao都生成了接口 结果就不能向数据库插入了 一个错也没有 数据库也没有值
Hibernate: insert into xiang.dbo.mer_order (O_id, M_wid, M_num) values (?, ?, ?)
Hibernate: insert into xiang.dbo.order_info (U_id, S_id, P_id, Os_id, O_tolprice, O_uname, O_link_type, O_uaddress, O_xtime, O_stime, O_ftime) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
第一个插入的数据的主键是下面表的外键 要用事务是不 在配置文件里面怎么写 是不是在映射的实体类文件中 加
inverse="true" cascade="all"
<set name="merOrders" inverse="true" cascade="all">
<key>
<column name="O_id" />
</key>
<one-to-many class="com.nf.dao.MerOrder" />
</set>
------解决方案--------------------
提交了么?
------解决方案--------------------
spring 事物管理配置的有问题吧
------解决方案--------------------
<!-- 声明式事务控制 -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="myServiceOperation" expression="execution(* com.gerz.myoffice.service.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="myServiceOperation" />
</aop:config>
把事务交给spring 管理
------解决方案--------------------
Spring默认基于JDK动态代理,动态代理也就是在方法执行前后加入一些自己的逻辑在里面。而JDK的动态代理是基于接口实现的,也就是说,实现同一个接口,在代理类中调用目标类的相同的方法。method.invoke();然后在调用方法前加入自己的逻辑。 如果不想写那么多接口的话,可以加入cglib包。 在spring配置中<aop:aspectj-autoproxy proxy-target-class="true"/>
cglib字节码生成目标类的子类方式实现代理。所以不需要考虑接口问题。
两者的区别:
JDK动态代理只能对实现了接口的类生成代理,而不能针对类
CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。因为是继承,所以该类或方法最好不要声明成final
------解决方案--------------------
------解决方案--------------------