Hibernate插入保存数据时,有打印SQL语句,数据库中却没有数据,求助

mingzhiming 2011-10-28 07:43:59
今天尝试做一个泛型的HibernateDAO,可是当我测试保存
对象时,控制台有打印Insert语句,且没有任何报错,Junit也是呈现绿条,当我在数据库中查看时,却没有数据,再怎么插入一样,找了好久的错误都没法解决。希望老师们能指点指点。
这是对整个DAO的接口

public interface DAO<T, ID extends Serializable> {
/**
* 保存实体
* @param entityClass 实体的类型
* @param entity 需要保存的实体
*/
public void save(T entity);

/**
* 更新实体
* @param entityClass 实体的类型
* @param entity
*/
public void update(T entity);
/**
* 根据主键值删除实体
* @param entity 被删除的实体
*/
public void delete(T entity);
/**
* 删除实体组
* @param entityIds 实体类数组
*/
public void delete(List<T> entities);
/**
* 根据主键值查找实体
* @param entityClass 实体的类型
* @param entityId 实体的ID
* @return
*/
public T findById( Class<T> entityClass,ID entityId);
/**
* 查找所有实体
* @param entityClass 实体类型
* @return
*/
public List<T> findAll(Class<T> entityClass);

}



DAO接口的抽象类:


public abstract class DaoImpl<T, ID extends Serializable> extends HibernateDaoSupport implements DAO<T, ID> {

@Override
public void delete(T entity) {
getHibernateTemplate().delete(entity);
}

@Override
public void delete(List<T> entities) {
getHibernateTemplate().deleteAll(entities);
}

@Override
public void save(T entity) {
System.out.println(entity.toString());
getHibernateTemplate().saveOrUpdate(entity);
}

@Override
public void update(T entity) {
getHibernateTemplate().save(entity);

}

@Override
public List<T> findAll(Class<T> entityClass) {
return (List<T>) getHibernateTemplate().find(
"from " + entityClass.getName());

}

@Override
public T findById(Class<T> entityClass, ID entityId) {
return (T) getHibernateTemplate().get(entityClass, entityId);

}
}

这是我的applicationContext.xml配置文件

<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
</bean>
<!-- 配置事务管理 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="productTypeService" class="com.oa.model.service.impl.ProductTypeServiceBean">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

这是领域模型

public class ProductType implements Serializable {
private static final long serialVersionUID = 7234906375106899518L;
/** 产品类别 **/
private Integer typeid;
/** 类别名称 **/
private String name;
/** 备注 ,用于谷歌搜索 **/
private String note;
/** 是否可见 ,默认是可见的 **/
private Boolean visible = true;
/** 所属父类别 **/
private ProductType parentType;
/**拥有的子类别**/
private Set<ProductType> childTypes;
// setXxx && getXxx()
}

以及
映射文件 ProductType.hbm.xml

<class name="com.oa.model.ProductType" table="t_producttype">
<id name="typeid" type="integer">
<generator class="native"/>
</id>
<property name="name" type="string" length="36" not-null="false"/>
<property name="note" type="string" length="255" />
<property name="visible" type="boolean" not-null="false"/>
<set name="childTypes" inverse="true" access="field">
<key column="parentTypeid"/>
<one-to-many class="com.oa.model.ProductType"/>
</set>
</class>


希望老师们能指点指点,在这里谢过了
...全文
785 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
风过无痕1110 2011-10-30
  • 打赏
  • 举报
回复

<bean id="productTypeService"class="com.oa.model.service.impl.ProductTypeServiceBean">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>



经鉴定,没有配置事务

mingzhiming 2011-10-30
  • 打赏
  • 举报
回复
感谢各位,我也想是事务的问题,刚开始以为spring默认自动可以提交事务,我在hibnernate.cfg.xml中显式的配置出来。就可以提交事务了
<property name="hibernate.connection.autocommit">true</property>


结贴了,,,,谢谢
fytq813 2011-10-29
  • 打赏
  • 举报
回复
@Override
public void save(T entity) {
System.out.println(entity.toString());
getHibernateTemplate().saveOrUpdate(entity);
}

@Override
public void update(T entity) {
getHibernateTemplate().save(entity);

}
这两个方法里面,上面用save,下面用update,你现在这样,save的时候又没设主键值,每次save,数据库做的都是update操作,当然没数据了
baizhongwei 2011-10-29
  • 打赏
  • 举报
回复
没有配置事务属性吧..没提交的话都不会存到数据里面的
Tinker77 2011-10-29
  • 打赏
  • 举报
回复
既然都会显示出insert语句 那基本断定是缓存没有flush()。(事务提交)
 @Override
public void save(T entity) {
System.out.println(entity.toString());
getHibernateTemplate().saveOrUpdate(entity);
}

@Override
public void update(T entity) {
getHibernateTemplate().save(entity);

}

检查你上面的save()或saveOrUpdate()方法的事务吧
serbry0033 2011-10-29
  • 打赏
  • 举报
回复
没有配置事务属性!!google一下 或者可以查看spring官方文档
serbry0033 2011-10-29
  • 打赏
  • 举报
回复
声明式事务 配置事务管理器的同时,需要配置事务的管理属性的!默认是不管理的!
例如:对那个类进行事务处理,并且要细化,还要对类中每个方法进行不同的事务管理策略!
例子在:spring的docs里面有 或者google spring事务可以找到很多
BUG弄潮儿 2011-10-29
  • 打赏
  • 举报
回复
没有配置事务,的配置事务,插入数据的事务
zuxianghuang 2011-10-29
  • 打赏
  • 举报
回复
没报错,有数据,很显然是事务没commint;
你配置了事务吗
mingzhiming 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fytq813 的回复:]
@Override
public void save(T entity) {
System.out.println(entity.toString());
getHibernateTemplate().saveOrUpdate(entity);
}

@Override
public void update(T entity) {
getHibernat……
[/Quote]

可是我在ProductType.hbm.xml中映射时,主键是自动产生的啊, 如果要提供主键,您能具体说说例子 吗?
mingzhiming 2011-10-28
  • 打赏
  • 举报
回复
我想可能是ProductType.hbm.xml的映射文件有配置错误,清你们帮我看看
mingzhiming 2011-10-28
  • 打赏
  • 举报
回复

public interface ProductTypeService extends DAO {

}


我测试的就是ProductTypeService类,

这是我的测试类

ApplicationContext atx = new ClassPathXmlApplicationContext("applicationContext.xml");
productTypeService = (ProductTypeService) atx.getBean("productTypeService");
ProductType type = new ProductType("fine", "google find");
productTypeService.save(type);

保存type时,控制台有Insert插入语句。

67,513

社区成员

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

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