为什么这个@Transactional方法不会进行多次保存

时间:2014-06-14 19:13:06

标签: spring hibernate transactional

我试图在同一个user_friend db表中保存这个朋友关系,但只在方法结束时才在db 1中保留。

@Override
@Transactional(readOnly = false)
public boolean saveLocalFriends(UserFriend userFriend) {

    UserFriend userFriendToRevert = userFriend;

    if (this.friendDao.saveFriend(userFriend)) {

        userFriendToRevert.revert();
        return this.friendDao.saveFriend(userFriendToRevert);
    }

    return false;
}

基于@macias贡献的好方法。

@Override
@Transactional(readOnly = false)
public boolean saveLocalFriends(UserFriend userFriend) {

    UserFriend userFriendToRevert = new UserFriend();
    BeanUtils.copyProperties(userFriend, userFriendToRevert);    

    if (this.friendDao.saveFriend(userFriend)) {

        userFriendToRevert.revert();

        return this.friendDao.saveFriend(userFriendToRevert);
    }

    return false;
}

1 个答案:

答案 0 :(得分:1)

在您发布的方法中,单个实体会保存两次。我不确定 revert 方法的作用,但我认为它只是以某种方式改变了UserFriend的状态。第二次保存将基本覆盖第一次保存。注意

UserFriend userFriendToRevert = userFriend;

仅复制参考。如果你的目的是坚持修改userFriend的副本,你需要做的很难 - 构建一个新的UserFriend对象并逐个复制属性,然后保留副本。