在春天,我们是否需要同时@Transactional和@Modifying注释?
2022-09-03 15:12:48
我仍然试图围绕@Transactional是如何工作的。
我对服务类的方法进行了注释,并对存储库类中的方法进行了注释。带注释的方法是否适用于带注释的存储库中的方法?@Transactional
@Modifying
@Transactional
@Modifying
我的理解:
@Transactional
在没有数据的类的方法上写入数据库,而使用 ,数据被写入数据库。@Transactional( readOnly = true )
@Transactional
修改查询
- 修改方法签名只能返回 ,或者
void
Integer
int
- 更新查询必须是事务性的,用
@Transactional
标记- Spring Data 将删除
EntityManager
中挂起的所有未刷新的更改,使用@Modifying进行更改(clearAutomatically=false)
正如第二点所说,查询必须具有 ,因此我们可以在级别方法调用或方法级别调用时添加它。如果在级别添加,它也适用于从级别方法调用中调用的方法?@Modifying
@Transactional(readOnly=false)
@Service
@Repository
@Service
@Respository
@Service
例:
@Service
class AnimalServiceImpl implements AnimalService {
@Autowire
AnimalRepository animalRepository;
@Override
@Transactional
public void persistAnimal() {
....
animalRepository.save();
}
@Override
@Transactional(readOnly = true)
public void checkIfAnimalPresent() {
...
animalRepository.checkIfPresent();
}
@Override
@Transactional
public void deleteAnimal() {
...
animalRepository.deleteAnimal();
}
}
存储 库
@Repository
@Transactional(readOnly=true)
public interface AnimalRepository extends org.springframework.data.repository.Repository {
@Modifying
@Query(...)
void save();
@Modifying
@Query(...)
int checkIfPresent()
@Modifing
@Query(..)
int deleteAnimal();
}
我的问题是围绕着:
- 为什么我们需要在服务类中,当我们在存储库级别拥有它并且我有修改实体并将其写入数据库的方法时(只是因为我在类级别有)?
@Transactional
@Repository
@Modifying
@Transactional(readOnly = true)
- 服务类上的注释是否向类传递?
@Transactional
@Repository
我希望我在这里的问题和例子非常清楚。