浏览 2373 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-08-10
本人初次尝试使用Spring+Hibernate,经过一番摸索后,实现了检索功能,但不能插入记录。我把代码贴出来,请各位大哥帮我看看。
配置文件applicationContext.xml 引用 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="BBSDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>org.postgresql.Driver</value> </property> <property name="url"> <value>jdbc:postgresql://localhost/xxxx</value> </property> <property name="username"><value>xxxx</value></property> <property name="password"><value>xxxx</value></property> </bean> <bean id="BBSSessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>hbm/Member.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.PostgreSQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.use_out_join">false</prop> </props> </property> <property name="dataSource"><ref bean="BBSDataSource" /></property> </bean> <bean id="BBSTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager" > <property name="sessionFactory"> <ref bean="BBSSessionFactory" /> </property> </bean> <bean id="BBSTransactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager"> <ref bean="BBSTransactionManager" /> </property> <property name="transactionAttributeSource"> <value> com.openingsys.bbs.users.MembersBiz.*=PROPAGATION_REQUIRED </value> </property> </bean> <bean id="MembersBizTarget" class="com.openingsys.bbs.users.MembersBiz"> <property name="sessionFactory"> <ref bean="BBSSessionFactory" /> </property> </bean> <bean id="BizObjs" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="proxyInterfaces"> <value>com.openingsys.bbs.BizObjInterface</value> </property> <property name="interceptorNames"> <list> <value>BBSTransactionInterceptor</value> <value>MembersBizTarget</value> </list> </property> </bean> </beans> 业务对象MembersBiz.java [code:1]public class MembersBiz extends HibernateSupport implements BizObjInterface { public void create(Object obj) throws ObjectDuplicateException, Exception { Session session = super.getSession(); try { // check if the loginid is already exist List list = session.find("from com.openingsys.bbs.users.Member as m where m.loginId = ?", ((Member)obj).getLoginId(), new StringType()); if (list.size() != 0) { throw new ObjectDuplicateException("The LoginId '" + ((Member)obj).getLoginId() + "' is already exist!"); } session.save(obj); } catch (Exception e) { e.printStackTrace(); throw e; } } /* (non-Javadoc) * @see com.openingsys.bbs.BizObjInterface#delete(java.io.Serializable) */ public void delete(Serializable id) throws ObjectMissException, Exception { Session session = super.getSession(); try { int i = session.delete("from com.openingsys.bbs.users.Member as m where m.userId = ?", (String)id, new StringType()); if (i == 0) { throw new ObjectMissException("The member identified by '" + id + "' was not found!"); } } catch (Exception e) { e.printStackTrace(); throw e; } } /* (non-Javadoc) * @see com.openingsys.bbs.BizObjInterface#update(java.lang.Object) */ public void update(Object obj) throws ObjectMissException, Exception { // TODO Auto-generated method stub } /* (non-Javadoc) * @see com.openingsys.bbs.BizObjInterface#find(java.io.Serializable) */ public Object find(Serializable id) throws ObjectMissException, Exception { Session session = super.getSession(); try { Member member = (Member)session.get(Member.class, id); if (member == null) { throw new ObjectMissException("The member identify by '" + id + "' was not found!"); } return member; } catch (Exception e) { e.printStackTrace(); throw e; } } /* (non-Javadoc) * @see com.openingsys.bbs.BizObjInterface#search(java.util.HashMap, com.openingsys.bbs.Pager) */ public List search(HashMap crit, Pager page) throws Exception { // TODO Auto-generated method stub return null; } } [/code:1] 测试类TestBean.java [code:1]public class TestBean { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MembersBiz biz = (MembersBiz) context.getBean("MembersBizTarget"); try { Member member = (Member)biz.find("john"); System.out.println(member.getEmail()); member = new Member(); member.setLoginId("admin"); member.setUserName("Administrator"); member.setPassword("12345"); member.setEmail("sofjwe"); member.setRegiTime(new Date()); biz.create(member); // biz.delete("john"); } catch (Exception e) { e.printStackTrace(); } } } [/code:1] 运行测试类后,一切正常,控制台打印出正确的Email地址,但是数据库中却没有出现我想插入的数据,控制台也没有打印出insert语句。 请各位大哥帮我看看,谢谢。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-08-14
如果你从HibernateSupport类直接取得session的话,是不会自动commit的,你必须显示的commit。如果你使用spring的事物处理类(PlatformTranscationManager)的话,就可以自动commit。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-08-19
上文中用到的HibernateSupport是我自己写的一个类,并非spring提供。代码如下:[code:1]import org.springframework.orm.hibernate.SessionFactoryUtils;
import net.sf.hibernate.Session; import net.sf.hibernate.SessionFactory; /** * @author jm.lu * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class HibernateSupport { // This is required to use Hibernate's SessionFactory private SessionFactory sessionFactory; /** * @return Returns the sessionFactory. */ public SessionFactory getSessionFactory() { return sessionFactory; } /** * @param sessionFactory The sessionFactory to set. */ public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public Session getSession() { Session session = SessionFactoryUtils.getSession(getSessionFactory(), true); return session; } } [/code:1] 这样作也会有不能自动提交的问题吗? 我的想法是:事务规则由配置文件决定,如: 引用 <property name="transactionAttributeSource">
<value> com.openingsys.bbs.users.MembersBiz.*=PROPAGATION_REQUIRED </value> </property> 但现在的事实好像是:事务没有开始。不知到这一切中什么地方有错。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-08-25
如果没有用到事务,而且你直接用Session,我想大概是没有加入session.flush()方法的原因吧,如有事务,就不需要flush了,不知对不对,请你老试一试
|
|
| 返回顶楼 | |
|
最后更新时间:2004-08-26
建立你继承Spring的HibernateDaoSupport类.(getHibernateTemplate().save(Object)方法).并且使用TransactionTemplate类事务提交处理.
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-15
我也碰到同样的问题:
代码: 引用 public class EmployeeServiceImpl implements EmployeeService { /** * 创建联系信息 * @param o * @return */ public String createContactInformation(String base64) throws Exception { String result = null; try { Object o = Base64.decodeToObject(base64); ContactInformation pojo = (ContactInformation)BeanUtilsFactory.getBeanUtils() .copyProperties(o); result = contactInformationDAO.createContactInformation(pojo); } catch (BeanConvertedException bce) { System.out.println(bce.getLocalizedMessage()); } catch (Exception e) { System.out.println("exception:" + e.getLocalizedMessage()); throw e; } return result; } public class ContactInformationDAOHibernateImpl extends HibernateDaoSupport implements ContactInformationDAO { /** * 创建联系信息 * @param o * @return */ public String createContactInformation(ContactInformation o) throws DAOException { String result = null; result = (String)this.getHibernateTemplate().save(o); System.out.println("DAO,result:" + result); return result; } |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-15
配置文件:
引用 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"><value>jdbc/acc4</value></property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>com/sfexpress/domain/pojos/base/Currency.hbm.xml</value> <value>com/sfexpress/domain/pojos/base/ExchangeRate.hbm.xml</value> <value>com/sfexpress/domain/pojos/base/ContactInformation.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="dialect.Dialect">net.sf.hibernate.dialect.Oracle9Dialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="jdbc.fetch_size">50</prop> <prop key="jdbc.batch_size">25</prop> <prop key="jdbc.use_scrollable_resultset">false</prop> <!-- 解决Hibernate的Encode的问题 --> <prop key="connection.useUnicode">true</prop> <prop key="connection.characterEncoding">UTF-8</prop> </props> </property> <property name="dataSource"> <ref local="dataSource" /> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> <bean id="contactInformationDAO" class="com.sfexpress.server.persistence.hibernate.ContactInformationDAOHibernateImpl"> <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> <bean id="baseTxProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="create*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="employeeService" parent="baseTxProxy"> <property name="target"> <bean class="com.sfexpress.server.business.facade.impl.EmployeeServiceImpl"> <property name="contactInformationDAO"><ref bean="contactInformationDAO"/></property> </bean> </property> </bean> |
|
| 返回顶楼 | |




