如何确保`Spring-Data`中的每个数据库事务都按顺序执行?

时间:2016-08-01 10:56:12

标签: java spring transactions spring-data spring-data-jpa

最近我在使用Spring-Data

时遇到了问题

情况如下所述:

  • 在应用程序中,有多个数据库事务同时进行。
  • 我的两个实体类是UserWallet
  • 一个用户与一个钱包有关。
  • Admin user以外的每个用户都有Parent user
  • Admin User没有父用户。

由于有多个交易同时进行,因此有可能多个用户正在访问钱包表的相同记录,如下所述:

例如

一位用户正在执行某项交易,佣金将记入管理员用户的(家长用户)电子钱包,

同时,Admin用户正在自己的钱包上执行借记操作。

因此,在这种情况下,最后执行的事务将持久保存到数据库中。

那么有什么方法可以使一个事务等待另一个事务吗?

以下是用户和钱包表如何相关的示例

@Entity(name = "user")
@Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.NOT_SUPPORTED)
public class User implements UserDetails, Comparable<User> {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    @OrderColumn
    private Long Id;
    @OneToOne(fetch = FetchType.LAZY)
    @OrderColumn
    private Wallet wallet;
    @OneToOne
    @OrderColumn
    private User parentUser;

.........Getters and setters........
}


@Entity
public class Wallet {

    @Id
    @GeneratedValue
    @OrderColumn
    private Long Id;
    @OneToOne()
    @OrderColumn
    private User user;

    //Other values.
    ....... GETTERS AND SETTERS.......
}

简而言之,我需要让一个事务等待另一个事务完成,如果已经有的话。

我尝试过隔离和传播,但没有产生所需的结果。

春季数据是否有可能让交易相互等待?

提前致谢。

1 个答案:

答案 0 :(得分:1)

根据需要进行传播可以达到目的。

@Transactional(isolation = Isolation.SERIALIZABLE, propagation = Propagation.REQUIRED)