一、在查询出来的对象上直接设置属性(该属性配置了可以持久化,如果不是可持久化的就没有关系)。

出错的代码:(查询用的不好也会导致数据更新哦)

Pagination pagination = groupJoinService.findByEg(groupJoin, true, cond, Pagination.cpn(pageNo),FrontUtils.pageSize(pageSize));//这是一个分页查询的方法使用hibernate的Criteria,最底下有代码

List<GroupJoin> list = (List<GroupJoin>) pagination.getList();

if(null != list && list.size()>0){

for(GroupJoin bean:list){

if(null == bean.getPersons()){

Integer curPersons = groupStartService.getCurPersons(bean.getStartId());

bean.setPersons(curPersons);//这时候数据库中的这个对象数据有可能会变

if(curPersons >= minPersonOne){

bean.setStatus(GroupJoin.STATUS_CAN);

}else{

bean.setStatus(GroupJoin.STATUS_NO);

}

}else{

bean.setStatus(GroupJoin.STATUS_YES);

}

}

}

pagination.setList(list);

正确的代码:

Pagination pagination = groupJoinService.findByEg(groupJoin, true, cond, Pagination.cpn(pageNo),FrontUtils.pageSize(pageSize));

List<GroupJoin> gjs = new ArrayList<GroupJoin>();//重新new一个对象

List<GroupJoin> list = (List<GroupJoin>) pagination.getList();

if(null != list && list.size()>0){

for(GroupJoin bean:list){

if(null == bean.getPersons()){

Integer curPersons = groupStartService.getCurPersons(bean.getStartId());

bean.setPersons(curPersons);

if(curPersons >= minPersonOne){

bean.setStatus(GroupJoin.STATUS_CAN);

}else{

bean.setStatus(GroupJoin.STATUS_NO);

}

}else{

bean.setStatus(GroupJoin.STATUS_YES);

}

gjs.add(bean);//然后添加进去

}

}

pagination.setList(gjs);

二、设置主键生成方式时自己设置的id会被忽略掉(数据库mysql,持久层框架mysql)

将主键的生成方式设置成了identity,导致了自己设置了id会被忽略,最终使用数据库的自增长主键。

下面是代码及错误的xxx.hbm.xml配置

java代码:(service层中)  

@Override

public User initUser(String openId,String nickname,String headimgurl,String address,String sex,String access_token,String refresh_token

,String expires_in,String state) throws Exception {

User user = findByOpenid(openId);

boolean isSellerUrl = FrontUtils.isSellerUrl(state);

if(null == user){

user = new User();

user.setOpenId(openId);

user.setAddTime(new Date());

user.setStatus(Integer.valueOf(1));

user.setAccessToken(access_token);

user.setRefreshToken(refresh_token);

user = save(user);

initUserDetail(user.getId(), headimgurl, nickname, address, openId, sex);//如果主键生成方式设置成了identity,就算你设置了id也会被忽略掉,直接使用数据库中自增长的id

if(isSellerUrl){//如果是商家链接初始化商家

initSeller(user.getId());

}

}else{

if(isSellerUrl){

Seller seller = sellerService.findById(user.getId());

if(null == seller){

initSeller(user.getId());

}

}

}

return user;

}

Seller.hbm.xml(问题出现在这里)

//省略

<hibernate-mapping package="com.sellers.entity">

<class name="Seller" table="sl_seller"  dynamic-update="true">

<meta attribute="sync-DAO">false</meta>

<cache usage="read-write"/>

<id name="id" type="integer" column="id" ><generator class="identity"/></id> 

//省略

修复后:<id name="id" type="integer" column="id" ><generator class="assigned"/></id> 

上面实例查询的代码:

public Pagination findByEg(T eg, boolean anyWhere, Condition[] conds,

int page, int pageSize, String... exclude) {

Order[] orderArr = null;

Condition[] condArr = null;

if (conds != null && conds.length > 0) {

List<Order> orderList = new ArrayList<Order>();

List<Condition> condList = new ArrayList<Condition>();

for (Condition c : conds) {

if (c instanceof OrderBy) {

orderList.add(((OrderBy) c).getOrder());

} else {

condList.add(c);

}

}

orderArr = new Order[orderList.size()];

condArr = new Condition[condList.size()];

orderArr = orderList.toArray(orderArr);

condArr = condList.toArray(condArr);

}

Criteria crit = getCritByEg(eg, anyWhere, condArr, exclude);

return findByCriteria(crit, page, pageSize, null, orderArr);

}

@SuppressWarnings("rawtypes")

protected Pagination findByCriteria(Criteria crit, int pageNo,

int pageSize, Projection projection, Order... orders) {

int totalCount = ((Number) crit.setProjection(Projections.rowCount()).uniqueResult()).intValue();

Pagination p = new Pagination(pageNo, pageSize, totalCount);

if (totalCount < 1) {

p.setList(new ArrayList());

return p;

}

crit.setProjection(projection);

if (projection == null) {

crit.setResultTransformer(Criteria.ROOT_ENTITY);

}

if (orders != null) {

for (Order order : orders) {

crit.addOrder(order);

}

}

crit.setFirstResult(p.getFirstResult());

crit.setMaxResults(p.getPageSize());

p.setList(crit.list());

return p;

}

161121、hibernate导致数据出错的两个地方的更多相关文章

  1. jmeter随笔(9)--有两种编码风格,导致数据乱码

    问题:在一个网站,有两种编码风格,导致数据乱码 解决办法: 1.首先设置jmeter的配置文件 2.针对要求是utf-8格式的这样的请求,做单独的编码处理(beanshell处理) 3.运行,在htm ...

  2. Hibernate在PostgreSQL上执行sum函数导致数据失真的问题

    有一段通过Hibernate从PostgreSQL上进行sum统计的简单代码,但统计结果却导致数据失真,不知原因何在,求指教! Java代码片段如下: public List<Object> ...

  3. Hibernate的数据查找,添加!

    1.首先看一下测试数据库的物理模型 2.测试所需要的Hibernate的jar包 3.数据库的sql /*=============================================== ...

  4. Struts2中validate数据校验的两种常用方法

    本文主要介绍Struts2中validate数据校验的两种方法及Struts2常用校验器.  1.Action中的validate()方法 Struts2提供了一个Validateable接口,这个接 ...

  5. 【Spark调优】大表join大表,少数key导致数据倾斜解决方案

    [使用场景] 两个RDD进行join的时候,如果数据量都比较大,那么此时可以sample看下两个RDD中的key分布情况.如果出现数据倾斜,是因为其中某一个RDD中的少数几个key的数据量过大,而另一 ...

  6. hibernate实现数据实体复制保存

    hibernate实现数据实体复制保存 2013年12月16日 11:57:22 Hardy008 阅读数:3474   描述:需要将数据的一条记录进行复制保存为一条新记录. 思路:从数据库中取得一条 ...

  7. pt-osc改表导致数据不一致案例分析

    2016-06-10 李丹 dba流浪猫 我们平时除了解决自己问题外,有时候也会协助圈内人士,进行一些故障排查,此案例就是帮某公司DBA进行的故障分析,因为比较典型,特分享一下,但仅仅是分享发生的过程 ...

  8. Spark-5-如何定位导致数据倾斜的代码

    数据倾斜只会发生在shuffle过程中.这里给大家罗列一些常用的并且可能会触发shuffle操作的算子:distinct.groupByKey.reduceByKey.aggregateByKey.j ...

  9. ubuntu server 12.04U盘安装,提示无法挂载安装光盘或光盘读取数据出错

    今天用Ultraiso将Ubuntu server 12.04 刻入U盘中安装系统,中间提示错误:1.检测不到cdrom(即U盘没有挂载上):2.从光盘中读取数据出错.问题如下图所示: 上网搜了下解决 ...

随机推荐

  1. ios项目生成ipa文件方法

    做这些的前提是你配置好了所有的证书,如果还没先去配置证书吧. 1.打开需要生成ipa的ios项目.2.在运行按钮的后面选择ios Device3.点击Product 按钮,选择第五个Archive4. ...

  2. Linux Native Aio 异步AIO的研究

    Linux Native Aio 异步AIO的研究 http://rango.swoole.com/archives/282 首先声明一下epoll+nonblock从宏观角度可以叫做全异步,但从微观 ...

  3. linux截取指定字符shell cut awk

    [root@mylab demo]# echo $var939f61b61978a589d9873e9ea7fdf201b213dec2[root@mylab demo]# echo ${var:0: ...

  4. python_模块

    1. 模块的导入 (1) python中import module时,系统通常在哪些路径下面查找模块? 在以下的路径查找模块:sys.path 如果你模块所在的目录,不在sys.path的目录下,可以 ...

  5. 注册页面的简单搭建(H5)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 解决download.msdn.microsoft.com无法正确解析而无法下载的问题

    不知何时,微软 MSDN 订阅软件下载服务IP解析有问题,总是在点击“下载”按钮之后无法打开. 想必又跟“国情”有关,我是使用联通宽带,没测试过电信的. 我是可以通过指定hosts entry来解决: ...

  7. Java基础之一组有用的类——生成日期和时间(TryDateFormats)

    控制台程序. java.util包中含有相当多的类涉及日期和时间,包括Date类.Calendar类和GregorianCalendar类. Date类对象其实定义了精确到毫秒的时刻,从1970年1月 ...

  8. mysql 插入重复值 INSERT ... ON DUPLICATE KEY UPDATE

    向数据库插入记录时,有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是saveOrUpdate操作.这种控制可以放在业务层,也可以放在数据库层,大多数数据库都支持这种需求 ...

  9. Swift实战-豆瓣电台(一)准备

    一 准备 我们现在看看我们要做一个什么样的东西 观看地址:http://v.youku.com/v_show/id_XNzI4ODY2Mjky.html 布局 通过上面这张图我们可以看出整个demo有 ...

  10. Lintcode: Update Bits

    Given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits be ...