Hibernate4执行save()或update()无效

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51383298

        最近在写网上商城项目时,遇到一个问题:hibernate在执行save()或者update()方法后,并没有任何效果,数据库中没有任何改动,而且控制台也没有报任何错,这让我很无语……

        我在网上查了下,有的人说是主键的自增长问题,有的人说是没有开启事务,所以无法写入或更新数据库,我详细看了他们的分析,说的都有道理,但是这些解决方法对我都不管用,因为我的主键是没有问题的,事务是由spring管理的,在其他save操作都可以,都没有问题。

        既然客观上都没有问题,于是我把焦点放在了具体要save或update的对象上了,对POJO做了仔细的分析,首先看一下我要save的对象对应数据库中的表:

[sql] view plain copy

 

  1. /*=============================*/  
  2. /* Table: 商品表结构            */  
  3. /*=============================*/  
  4. create table product  
  5. (  
  6.    /* 商品编号,自动增长 */  
  7.    id                  int primary key not null auto_increment,  
  8.    /* 商品名称 */  
  9.    name                varchar(50),  
  10.    /* 商品价格 */  
  11.    price               decimal(8,2),  
  12.    /* 商品图片 */  
  13.    pic                 varchar(300),  
  14.    /* 商品简单介绍 */  
  15.    remark              longtext,  
  16.    /* 商品详细介绍 */  
  17.    xremark             longtext,  
  18.    /* 商品生产日期 */  
  19.    date                timestamp default CURRENT_TIMESTAMP,  
  20.    /* 是否为推荐商品,推荐商品才有可能显示在商城首页 */  
  21.    commend             bool,  
  22.    /* 是否为有效商品,有效商品才有可能显示在商城首页 */  
  23.    open                bool,  
  24.    /* 商品所在的类别编号*/  
  25.    cid                  int,  
  26.    constraint cid_FK foreign key(cid) references category(id)  
  27. );  

        然后具体的POJO就不贴上来了,就是根据这张表生成的一些字段属性以及set和get方法。我觉得最有可能出问题的字段应该就是这个时间date,于是我看了下POJO里关于date的代码:

[java] view plain copy

 

  1. @Entity  
  2. public class Product implements java.io.Serializable {  
  3.   
  4.     // Fields  
  5.     private Timestamp date;  
  6.   
  7.     //省略其他无关代码……  
  8.   
  9.     @Column(name = "date", nullable = false, length = 19)  
  10.     public Timestamp getDate() {  
  11.         return this.date;  
  12.     }  
  13.   
  14.     public void setDate(Timestamp date) {  
  15.         this.date = date;  
  16.     }  
  17. }  

        于是我再一次上网搜索了这个Timestamp,发现问题就出在这,将Timestamp改成java.util.Date即可。然后传进来一个Date对象,Hibernate会自动转成Timestamp类型。

        这个问题也给我一个启示:无法执行数据库操作也有可能是对象本身的问题,要从表的字段和POJO属性之间来排查。

_____________________________________________________________________________________________________________________________________________________

-----乐于分享,共同进步!

-----更多文章请看:http://blog.csdn.net/eson_15

时间: 2024-09-21 05:03:32

Hibernate4执行save()或update()无效的相关文章

解决Hibernate4执行save()或update()无效问题的方法_java

最近在写网上商城项目时,遇到一个问题:Hibernate在执行save()或者update()方法后,并没有任何效果,数据库中没有任何改动,而且控制台也没有报任何错,这让我很无语-- 我在网上查了下,有的人说是主键的自增长问题,有的人说是没有开启事务,所以无法写入或更新数据库,我详细看了他们的分析,说的都有道理,但是这些解决方法对我都不管用,因为我的主键是没有问题的,事务是由Spring管理的,在其他save操作都可以,都没有问题. 既然客观上都没有问题,于是我把焦点放在了具体要save或upd

Mysql 原生语句中save or update 的写法汇总

  背景   在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert. 如果使用Hibernate,它自带saverOrUpdate方法,用起来很方便,但如使用原生sql语句呢?   新手最常见的写法是,先通过select语句查询记录是否存在,存在则使用update语句更新,不存在则使用insert语句插入. 但是这样做明显不够优雅,存在几个问题: •为了执行一次更新操作,却在程序中使用了两次sql查询语句,在系统负载比较大的情况下,

session-hibernate4为什么在执行save ()后直接查询直接查询不到数据?

问题描述 hibernate4为什么在执行save ()后直接查询直接查询不到数据? hibernate4为什么在执行save ()后直接查询直接查询不到数据 同样的配置在hibernate3这样是能查询到数据的,换到hibernate4就是查不到, 就像save()操作没有把对象缓存一样,这样是为什么呀?下面是配置 <property name="dialect"> org.hibernate.dialect.MySQL5InnoDBDialect </proper

Mysql 原生语句中save or update 的写法汇总_Mysql

背景   在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert. 如果使用Hibernate,它自带saverOrUpdate方法,用起来很方便,但如使用原生sql语句呢?   新手最常见的写法是,先通过select语句查询记录是否存在,存在则使用update语句更新,不存在则使用insert语句插入. 但是这样做明显不够优雅,存在几个问题: •为了执行一次更新操作,却在程序中使用了两次sql查询语句,在系统负载比较大的情况下,性能

对象-Dbhelper save 和 update哪一个效率更高

问题描述 Dbhelper save 和 update哪一个效率更高 public void updateUser(int id, int time, String password) throws Exception { // 根据用户id查询用户 User user = getUser(id); // time==1,需要更新系统时间 if (time == 1) { user.setLast_vist_time(DateUtil.formatDate(new Date())); ; } /

ssh整合-常见的SSH执行save方法报错,

问题描述 常见的SSH执行save方法报错, 报错:Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'driverClassName' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]: Bean property 'driverClassName' is not writable or has an inval

ubuntu-Ubuntu10.04 执行sudo apt-get update时无法连接

问题描述 Ubuntu10.04 执行sudo apt-get update时无法连接 我的系统是Ubuntu10.04,网络连接正常.在执行sudo apt-get update 时出现出现无法连接的问题:部分截屏如下 : 请各位帮个忙,实在不知道怎么整么了? 解决方案 sudo apt-get updatesudo apt-get updateubuntu执行sudo apt-get update时出现"Hash校验和不符" 解决方案二: 对应的源访问不了了,你需要添加新的repo

执行完getHibernate().update(obj)后,再执行getHibernate().find(),有运行错误【求解决】

问题描述 我的hibernate映射文件:<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&g

update无效-mybatis+spring+strust2 后update操作不报错但没起效果

问题描述 mybatis+spring+strust2 后update操作不报错但没起效果 日志如上图 sql语句文件如上图 有两个疑问: 1 做insert操作无任何问题,update 操作不报错,就是更新无效果,数据还是原来的数据. 2 sql语句的配置xml文件中判断了if xxx!=null 但是日志里打印出来的sql还是有null (如图2) 解决方案 你的if条件有问题,如果你的参数里面已经有title等参数,就应该写为title!=null而不是带#的 解决方案二: http://