我正在为我的应用程序使用Spring Data JPA,它有以下几层: 1.服务层,带接口和实现(带注解的@service) 1.CRUD repository layerwith Spring Data JPA,以及自定义repository implementations 1.实体层 我想知道把@Transactional放在哪里才是正确的。目前,我在服务层中使用了它,在那里使用了存储库。
@Service("hotelService")
@Transactional
public class HotelServiceImpl implements HotelService {
@Autowired
HotelDao hotelDao;
// The rest of code omited ...
}
如果你想在你的代码中添加一个transactional行为的话,正确的@Transactional注解应该放在 any 层。假定使用数据库访问的代码。通常,您可以在存储库上使用@Transactional。但是如果你需要的话,你也可以把它添加到服务层。 了解Spring框架的声明性事务实现 您可以将@Transactional注解放在接口定义、接口上的方法、类定义或类上的公共方法之前。但是,仅仅存在@Transactional注解还不足以激活事务行为。@Transactional注解只是一种元数据,可以由某些@Transactional感知的运行时基础设施使用,并且可以使用元数据配置具有事务行为的适当bean。
2条答案
按热度按时间h7appiyu1#
事务属于服务层。例如,如果你有
HotelService
,那么代码看起来像这样:ztyzrc3y2#
如果你想在你的代码中添加一个transactional行为的话,正确的
@Transactional
注解应该放在 any 层。假定使用数据库访问的代码。通常,您可以在存储库上使用@Transactional
。但是如果你需要的话,你也可以把它添加到服务层。了解Spring框架的声明性事务实现
您可以将
@Transactional
注解放在接口定义、接口上的方法、类定义或类上的公共方法之前。但是,仅仅存在@Transactional
注解还不足以激活事务行为。@Transactional
注解只是一种元数据,可以由某些@Transactional
感知的运行时基础设施使用,并且可以使用元数据配置具有事务行为的适当bean。