spring+hibernate配置,数据无法提交到数据库,求救。。。。

巫医风子 2008-11-25 04:42:25

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- sessionFactory配置 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>

<!-- 注入配置 -->
<bean id="productDao" class="hibernate.test.ProductDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="productTarget"
class="hibernate.test.ProductServiceImpl">
<property name="productDao">
<ref bean="productDao" />
</property>
</bean>


<!-- 以下就是声明式事务配置 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<!-- 配置事务属性 -->
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<!-- 目标bean -->
<value>productTarget</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
</beans>



DAO:
public class ProductDaoImpl implements ProductDao {


private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void save(Product product) {
Session session = sessionFactory.openSession();
session.save(product);

}
}


Service:
public class ProductServiceImpl implements ProductService {
private ProductDao productDao;
public void setProductDao(ProductDao productDao) {
this.productDao = productDao;
}
public void saveProduct(){
Product product = new Product();
product.setName("Test:"+(new Date()).toString());
productDao.save(product);
}
}


测试代码:
public class TestMain {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext2.xml");
ProductService productService = (ProductService) ctx
.getBean("productTarget");
productService.saveProduct();
}
}


问题:程序可以执行,但是数据无法插入到数据库中去,似乎在内存中,在DAO中,若使用session.get()方法,可以得到要插入的那个对象。
找了一个下午了,大家帮帮忙。。。
...全文
260 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
巫医风子 2008-11-27
  • 打赏
  • 举报
回复
先谢下6楼以及各位

结贴先
一直不明白的一点是:在spring+Hibernate事务配置中,DAO是如何实现的,是使用sessionFactory直接注入一个sessionFactory,还是通过注入sessionFactory,然后new 一个 HibernateTemplate?
巫医风子 2008-11-26
  • 打赏
  • 举报
回复
刚弄的日志
巫医风子 2008-11-26
  • 打赏
  • 举报
回复
Hibernate: insert into product (name) values (?)
DEBUG (AbstractBatcher.java:484) - preparing statement
DEBUG (AbstractEntityPersister.java:1997) - Dehydrating entity: [hibernate.test.Product#<null>]
DEBUG (NullableType.java:133) - binding 'Test:Wed Nov 26 00:47:50 CST 2008' to parameter: 1
DEBUG (IdentifierGeneratorFactory.java:72) - Natively generated identity: 38
DEBUG (AbstractBatcher.java:374) - about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
DEBUG (AbstractBatcher.java:533) - closing statement
DEBUG (TransactionAspectSupport.java:319) - Completing transaction for [hibernate.test.ProductService.saveProduct]
DEBUG (AbstractPlatformTransactionManager.java:880) - Triggering beforeCommit synchronization
DEBUG (AbstractPlatformTransactionManager.java:893) - Triggering beforeCompletion synchronization
DEBUG (AbstractPlatformTransactionManager.java:707) - Initiating transaction commit
DEBUG (HibernateTransactionManager.java:602) - Committing Hibernate transaction on Session [org.hibernate.impl.SessionImpl@5e222e]
DEBUG (JDBCTransaction.java:103) - commit
DEBUG (SessionImpl.java:337) - automatically flushing session
DEBUG (JDBCContext.java:205) - before transaction completion
DEBUG (SessionImpl.java:393) - before transaction completion
DEBUG (JDBCTransaction.java:116) - committed JDBC Connection
DEBUG (JDBCContext.java:219) - after transaction completion
DEBUG (ConnectionManager.java:302) - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
DEBUG (SessionImpl.java:422) - after transaction completion
DEBUG (AbstractPlatformTransactionManager.java:906) - Triggering afterCommit synchronization
DEBUG (AbstractPlatformTransactionManager.java:922) - Triggering afterCompletion synchronization
DEBUG (TransactionSynchronizationManager.java:282) - Clearing transaction synchronization
DEBUG (TransactionSynchronizationManager.java:199) - Removed value [org.springframework.orm.hibernate3.SessionHolder@4ed904] for key [org.hibernate.impl.SessionFactoryImpl@3fbbfc] from thread [main]
DEBUG (HibernateTransactionManager.java:681) - Closing Hibernate Session [org.hibernate.impl.SessionImpl@5e222e] after transaction
DEBUG (SessionFactoryUtils.java:774) - Closing Hibernate Session
DEBUG (SessionImpl.java:273) - closing session
DEBUG (ConnectionManager.java:380) - performing cleanup
DEBUG (ConnectionManager.java:441) - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
DEBUG (DriverManagerConnectionProvider.java:129) - returning connection to pool, pool size: 1
DEBUG (JDBCContext.java:219) - after transaction completion
DEBUG (ConnectionManager.java:302) - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources!
DEBUG (SessionImpl.java:422) - after transaction completion
巫医风子 2008-11-26
  • 打赏
  • 举报
回复
就这个:
$Proxy0
Hibernate: insert into product (name) values (?)

错误信息没有
日志没弄
VistaKobe 2008-11-26
  • 打赏
  • 举报
回复
同意6楼的看法。
时光瞄 2008-11-26
  • 打赏
  • 举报
回复
你的DAO是绝对有问题的!让你的DAO继承HibernateDaoSupport这个类,DAOl类中也不用SessionFactory这个成员变量了,当然更不用相应的set方法了,然后在程序中这样写:
getHibernateTemplate().saveOrUpdate(product)
,因为Spring的事物管理器对Session都是采用ThrealLocal来进行工作的,你那样直接SessionFactory.openSession()是不行的。。
jlh2 2008-11-25
  • 打赏
  • 举报
回复
有日志信息或者错误信息吗?贴上来看看?如果正常执行,应该是能打印出执行的SQL语句的。
巫医风子 2008-11-25
  • 打赏
  • 举报
回复
附上hibernate配置


<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mysport</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">linke</property>

<!-- SQL dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql"> false</property>

<!--
<property name="hibernate.connection.autocommit">false</property>
-->
<!-- 文件映射 -->
<mapping resource="hibernate/test/Product.hbm.xml"/>

</session-factory>

</hibernate-configuration>


67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧