我有以下代码:
@Service
public class MyService implements IMyService {
@Inject
IAnotherService anotherService;
// injects go here
// some code
@Transactional(isolation=Isolation.SERIALIZABLE)
public Result myMethod() {
// stuff done here
return this.myPrivateMethod()
一些系统信息,它使用Spring,Spring数据,JPA和Hibernate。
我的问题是,2有什么区别?见下文:
//this uses plain JPA, and uses Spring's Transactional
@Transactional(isolation=Isolation.READ_UNCOMMITTED)
public List getData() {
//code
}
//this uses Spring Data
@Lock(LockModeType.None)
public List getData() {
//code
}
如何在此方法中防止种族状况:
@Lock
public boolean delete(int id) {
someEntity byId = someRepository.findById(id).orElseThrow(() -> new NotFoundException());
someRepository.delete(byId);
return true;
}
我做了@Lock
@Aspect
@Component
@EnableAspectJAutoProxy
public class LockAspect {
private final R
我一直在尝试这样做:
@Transactional(isolation=Isolation.SERIALIZABLE,
rollbackFor={Exception.class},
propagation=Propagation.REQUIRES_NEW)
关于我的服务方法,但是spring抱怨说:
Standard JPA does not support custom isolation levels - use a special JpaDialect
我该如何解决这个问题?
我有A类和B类,如代码所示。在前面提到的代码中,事务的行为如何?在类B中,它会因为isolation_level而在提交后关闭事务吗?
Class A{
@Transactional(propagation = Propagation.REQUIRED)
method classAMethod(){
B b = new B();
b.classBMethod
}
}
Class B{
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMI
@Transactional(isolation=Isolation.READ_COMMITTED, propagation=Propagation.REQUIRED,readOnly=false,timeout=1000, rollbackFor=Exception.class)
void saveUserAndHoliday(User user, Holiday holiday)
{
// At this point vacationDays of user is 27
userDao.save(user);
// here vacationDays of use
我和JAX,Guice,MyBatis有项目.有通过REST端点调用的方法getToken()。它是同步的,以避免由于@Transactional(isolation = Isolation.SERIALIZABLE)的异常。但是,同步方法不安全,不同的调用可能同时影响数据并引发异常:
Cause: org.postgresql.util.PSQLException: ERROR: could not serialize access due to read/write dependencies among transactions
我试图通过mapper对象同步,但它也不起作用。唯一有效的解
我正在试着消除我的疑虑。Spring事务边界,示例如下。
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void test() {
test1();
test2();
}
@Transactional(propagation=Propagation.NOT_SUPPORTED, readOnly=false)
public void test1() {
this.jdbcTemplate.execute("INSERT INTO TEST VALUES('
我想将事务隔离模式更改为serializable with Spring注解,但我得到了一个异常:
@Transactional(isolation = Isolation.SERIALIZABLE)
org.springframework.transaction.InvalidIsolationLevelException:
JtaTransactionManager does not support custom isolation levels by default - switch 'allowCustomIsolationLevels' to 'true
Description:
Field am in wow.service.AdminServiceImpl required a bean of type 'wow.mapper.AdminMapper' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of
我想打开一个新的事务,并使用我在第一个事务中所做的所有更改。但从第二个事务开始,我无法读取内部实体 class A {
@Autowirde
private B b;
@Transactional
public test() {
ProgramRole programRole = new ProgramRole();
programRoleRepo.save(programRole);
Program program = new Program();
program.setPr
我读到了spring/hibernate中的传播和隔离。我有一个特别的方法,我们有
0. @Transactional (the default spring annotation)
1. read several rows
2. some business logic
3. read (from other table using some data from the first read)
这在我看来有点不安全。如果其他人在第2步中删除了一行,该怎么办?
@Transactional(readOnly = true, isolation = Isolation.SERIALIZABLE)
我阅读了不同事务隔离级别的内容,并在SERIALIZABLE隔离级别上进行了讨论。我还知道,Postgres、Oracle和MySQL等数据库支持SELECT .. FOR UPDATE语法。
然而,当我想要锁定希望对其执行更新的行(或一系列行)时,我很困惑应该如何使用这些数据。
在过去使用JPA时,我总是在查询中使用@Transactional和一个LockModeType.PESSIMISTIC_WRITE。这意味着在SQL中使用READ_COMMITTED隔离级别和SELECT .. FOR UPDATE。
但是现在,在阅读了SERIALIZABLE之后,我想知道如果我使用@Transa
如果数据库已经存在,我有以下方法将播放器添加到数据库或更新它:
@Transactional(isolation = Isolation.SERIALIZABLE)
public Player addOrUpdatePlayer(String playerId, String playerName) {
Optional<Player> playerOptional = playerRepository.findById(playerId);
if (playerOptional.isPresent()) {
Player player = play