-
泛型DAO设计的getHibernateTemplate()操作15
今天做了些关于泛型的DAO,出了些问题!
显示 Hibernate: insert into User (password, username) values (?, ?) 但数据库没有记录!!
但原先表中的主键最大ID是10,执行5次后,表中都没有相关信息记录!!如果此时人工插入一条记录,新插入的记录ID是16!!
各位能否帮忙看下哪里出了问题!!
接口类 IBaseDAO.javapublic interface IBaseDAO<T, ID extends Serializable> {
public T saveEntity(T entity);
}
实现类 HibernateTemplateDAO.java
public class HibernateTemplateDAO<T, ID extends Serializable> implements
IBaseDAO<T, ID> {private static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");
private Class<T> persistentClass;
HibernateTemplate ht;
IHibernateUtil hUtil;
public HibernateTemplateDAO() {
hUtil=(IHibernateUtil)factory.getBean("HibernateUtil");
ht=hUtil.getTemplate();
}
public T saveEntity(T entity) {
ht.save(entity);
return null;
}
}
HibernateUtil .java
public class HibernateUtil extends HibernateDaoSupport implements IHibernateUtil{
public HibernateTemplate getTemplate() {
return this.getHibernateTemplate();
}
}
配置如下:
<bean id="HibernateUtil" class="dolla.test.HibernateUtil">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" read-only="true"/>
<tx:method name="del*" propagation="REQUIRED" read-only="true"/>
<tx:method name="update*" propagation="REQUIRED" read-only="true"/>
<tx:method name="deploy*" propagation="REQUIRED" read-only="true"/>
<tx:method name="submit*" propagation="REQUIRED" read-only="true"/>
<tx:method name="save*" propagation="REQUIRED" read-only="true"/>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<!-- <tx:method name="*" propagation="REQUIRED" read-only="true"/> -->
</tx:attributes>
</tx:advice>
<!-- 哪些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="allManagerMethod" expression="execution(* dolla.test.*.*(..))"/>
<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
</aop:config>
问题补充:谢谢你的解答!! <br />1.关于remove的操作我没有编写!所以应该不会是这个的关系 <br />2.返回null是我暂时还不想返回实体!所以给了个Null 呵呵!! <br /> <br />我重新检查了代码!!谢谢你!!
问题补充:如果将IHibernateUtil 修改如下: <br />public class HibernateUtil extends HibernateDaoSupport implements IHibernateUtil{ <br /> <br /> public void save(User o){ <br /> this.getHibernateTemplate().save(o); <br /> <br /> } <br /> <br /> public HibernateTemplate getTemplate() { <br /> return this.getHibernateTemplate(); <br /> } <br /> <br /> <br />} <br /> <br />在HibernateTemplateDAO调用sava方法!可以成功插入!! <br />如果在HibernateTemplateDAO调用IHibernateUtil的getTemplate().saveEntity(U)方法!就出现上述的问题!!没有记录!!!
问题补充:<div class="quote_title">net.mail.public 写道</div><div class="quote_div"><div class="quote_title">引用</div><div class="quote_div">显示 Hibernate: insert into User (password, username) values (?, ?) </div> <br /> <br /><span style="font-size: x-large"><span style="color: red">除了显示这个,没显示其它的了吗? <br /> <br /> <br /> <br /> <br />把你保存记录的那个函数里面的代码,用try catch包围住,看有没有显示错误. <br /> <br />还有,你保存之后,你的提交是自动提交吗?</span></span></div> <br /> <br />谢谢!! <br />重新试过!没有其他的显示!!也没有显示异常错误!!2010年4月11日 15:02
2个答案 按时间排序 按投票排序
-
引用显示 Hibernate: insert into User (password, username) values (?, ?)
除了显示这个,没显示其它的了吗?
把你保存记录的那个函数里面的代码,用try catch包围住,看有没有显示错误.
还有,你保存之后,你的提交是自动提交吗?2010年4月11日 18:31
-
引用今天做了些关于泛型的DAO,出了些问题!
显示 Hibernate: insert into User (password, username) values (?, ?) 但数据库没有记录!!
但原先表中的主键最大ID是10,执行5次后,表中都没有相关信息记录!!如果此时人工插入一条记录,新插入的记录ID是16!!
引用显示 Hibernate: insert into User (password, username) values这个并不能说明数据插入成功.如果在一个事务里,事条开始的时候,显示的插入数据,如果在事务结束前,出现异常,则这个插入并不成功.
但通过你主键的变化,应该是插入数据了的,然后,你代码里应该还有删除插入的对象的代码.你仔细看一下,在插入数据之后的附件,找过有没有remove之类的方法调用.
还在,你可以通过设置断点与在代码中显示加入提交代码,并在数据库中查看结果来看数据是不是被插入.[code="java"]
public T saveEntity(T entity) {
ht.save(entity);
return null;
}
还有,你这里为什么又返回null?
希望对你有所帮助.2010年4月11日 16:12
相关推荐
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
通过上述分析,我们可以看出,合理设计和运用泛型DAO层,不仅可以显著提高代码的复用性和维护性,还能极大地简化复杂的数据库操作,使得开发人员能够更加专注于业务逻辑的实现。因此,对于那些追求高质量、高效率的...
本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...
【内容】在使用Hibernate泛型Dao时,首先需要定义一个基类,比如`AbstractGenericDao<T>`,其中T代表泛型类型,对应你要操作的实体类。这个基类会包含一些通用的CRUD(Create, Read, Update, Delete)方法,如`save...
【泛型DAO】是一种在Java开发中常见的设计模式,它利用了Java泛型特性来提高代码的可重用性和类型安全性。在Java中,DAO(Data Access Object)模式是用来封装对数据库的操作,将业务逻辑与数据访问逻辑分离,使得...
泛型DAO是一种设计模式,它通过定义一个通用的DAO接口或抽象类,可以适用于不同的实体类,减少了重复的代码。这种模式的核心在于利用Java的泛型特性,使得DAO方法可以处理任何类型的实体对象,而无需为每个实体类...
而泛型DAO是一个类型安全的,代码精简的设计模式(相对于传统DAO),尤其在DAO组件数量庞大的时候,代码量的减少更加明显。 泛型DAO的核心是定义一个GenericDao接口,声明基本的CRUD操作: 用hibernate作为持久化...
`JdbcTemplate`的泛型Dao实现是一种设计模式,目的是提高代码的可重用性和可维护性。通过定义一个泛型接口,我们可以创建一个通用的数据访问对象(DAO),这个DAO可以处理任何类型的实体类,只要它们遵循一定的规则...
6. **泛型Dao**:在Java开发中,泛型Dao(Generic Dao)是一种设计模式,用于减少重复的数据库操作代码。通过定义一个通用的Dao接口,可以实现对不同类型的实体对象进行CRUD操作,提高了代码的复用性和可维护性。...
泛型DAO模式在Java Web开发中的应用 摘要: 泛型DAO模式是Java Web开发中的一种重要模式,它可以提高数据访问代码的类型安全性和可读性。该模式可以与Struts、Spring和JPA框架集成,实现用户管理系统的开发。通过...
泛型DAO模式通过抽象化设计,增强了程序的复用性和简化了编程语言,同时在程序运行结束后进行类型检查,避免了运行时的问题,并提高了运行速度。 文章进一步讨论了泛型DAO模式的查询功能设计。查询功能是泛型DAO...
在泛型DAO中,我们定义一个通用的DAO接口,该接口使用类型参数T表示所操作的数据实体类。例如: ```java public interface GenericDAO, ID> { T save(T entity); void delete(ID id); T findById(ID id); List...
【泛型DAO模型设计】是Java开发中一种高效且可复用的数据访问对象(DAO)设计方式,结合了泛型和反射技术。泛型在Java中引入,旨在提高代码的安全性和可读性,减少类型转换的繁琐过程。DAO设计模式主要用于数据库...
上述代码中,`HibernateGenericDao`是泛型DAO的实现,它使用了Hibernate的SessionFactory来处理数据库操作。通过这种方式,我们可以为每个数据实体类创建一个DAO实例,而无需编写具体的CRUD(Create, Read, Update, ...
例如,当我们使用泛型DAO来操作User对象时,尝试插入一个Order对象会引发编译错误。 2. **代码复用**:泛型DAO可以为不同的实体类提供通用的方法,如增删查改等,减少了重复代码,提高了开发效率。只需要针对不同...
`GenericDao.txt`可能包含的是关于泛型Dao框架的设计文档或者代码示例,详细解释了如何使用泛型Dao进行数据库操作,可能包括如何定义泛型接口,以及如何创建和使用它的实现类。 `bin`目录通常是编译后生成的Java...
而泛型DAO(Data Access Object)则是基于Hibernate进一步抽象出来的一个设计模式,用于提供更通用的数据操作方法。本文档主要探讨了如何在Spring+Hibernate环境中创建和使用泛型DAO。 首先,我们来看一下泛型DAO...
4. **泛型DAO**: 在SSH框架中,泛型DAO是一种常见的设计模式,用于封装对数据库的基本操作,如增删查改。通过泛型,我们可以创建一个通用的DAO接口和实现,减少代码重复,提高代码复用。例如,我们可以创建一个`...