您的位置:首页 > 数据库

HibernateDaoSupport 无法保存数据到数据库,并且不报错

2014-09-18 15:33 323 查看
bean类:

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* 晒单表
*
*/
@Entity
@Table(name="PRZ_SHOW")
public class OrderShow implements Serializable {

private Long showId;                    //晒单id
private Long userId;                     //用户id
private Long goodsId;                   //商品id
private String showDesc;               //晒单感想
private Long orderId;              //订单id
private int verifyFlag;                     //审核标记
private String verifyTime;                    //审核时间
private String createTime;          //晒单时间

@Id
@GeneratedValue
@Column(name = "SHOW_ID", unique = true, nullable = false)
public Long getShowId() {
return showId;
}
public void setShowId(Long showId) {
this.showId = showId;
}

@Column(name="USER_ID")
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}

@Column(name="GOODS_ID")
public Long getGoodsId() {
return goodsId;
}
public void setGoodsId(Long goodsId) {
this.goodsId = goodsId;
}

@Column(name="GOODS_TYPE")
public int getGoodsType() {
return goodsType;
}
public void setGoodsType(int goodsType) {
this.goodsType = goodsType;
}

@Column(name="SHOW_DESC")
public String getShowDesc() {
return showDesc;
}
public void setShowDesc(String showDesc) {
this.showDesc = showDesc;
}

@Column(name="FAVORATE_COUNT")
public Long getFavorateCount() {
return favorateCount;
}
public void setFavorateCount(Long favorateCount) {
this.favorateCount = favorateCount;
}

@Column(name="COMMENT_COUNT")
public Long getCommentCount() {
return commentCount;
}
public void setCommentCount(Long commentCount) {
this.commentCount = commentCount;
}

@Column(name="ORDER_ID")
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}

@Column(name="VERIFY_FLAG")
public int getVerifyFlag() {
return verifyFlag;
}
public void setVerifyFlag(int verifyFlag) {
this.verifyFlag = verifyFlag;
}

@Column(name="VERIFY_TIME")
public String getVerifyTime() {
return verifyTime;
}
public void setVerifyTime(String verifyTime) {
this.verifyTime = verifyTime;
}

@Column(name="CREATE_TIME")
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}

}


service类的保存方法

OrderShow show = new OrderShow();
show.setShowId(this.orderShowManager.getSequence() );
show.setUserId(userId);
show.setGoodsId(goodsId);
show.setGoodsType(goodsType);
show.setOrderId(orderId);

show.setShowDesc(comment);
show.setCommentCount(0L);
show.setFavorateCount(0L);
show.setCreateTime( DateUtil.dateToString14(new Date()));

try  {
this.orderShowManager.saveOrUpdate(show);
} catch (Exception e) {
e.printStackTrace();
return null;
}


manager类(dao层)

<pre name="code" class="java">

import java.sql.SQLException;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.stereotype.Repository;

@Repository()
public class OrderShowManager <OrderShow>  extends  HibernateDaoSupport   {

private JdbcTemplate jdbcTemplate;

public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
 
/**
*获得oracle表自增长主键
*/
public Long getSequence() {
return (Long)queryForObject("select SQ_PRZ_SHOW.nextval from dual", Long.class);

}

private Object queryForObject(String sql, Class requiredType) {
try {
return jdbcTemplate.queryForObject(sql, requiredType);
} catch (EmptyResultDataAccessException e) {
return null;
}
}

}




然后就发生,提示保存成功,但是数据库没有值得情况。问题是后台没有错误提示
发生这种情况,在dao层(manager)加上这个方法打印提示

public void save(final OrderShow show) {
this.getHibernateTemplate().execute( new HibernateCallback() {
@Override
public Object doInHibernate(Session session) throws HibernateException, SQLException {
session.save(show);
return null;
}
});
}



若是捕捉错误为:could not get next sequence value,解决方法就是
把bean类的    @GeneratedValue 去掉,程序就会正常运行。
错误情况为:
could not get next sequence value、无法保存bean类到数据库


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: