use*_*644 7 java spring transactions spring-mvc entitymanager
我正在努力更好地处理Spring的@Transactional属性.据我所知,它基本上包装了标记为@Transactional事务的方法的内容.将服务/业务层方法标记为事务性是否合适,而不是实际的DAO方法,就像我在这里所做的那样?
服务实施
public class UserServiceImpl implements UserServiceInt{
@Autowired
private UserServiceDAO serviceDAO;
@Override
public User getUser(int id){
return serviceDAO.getUser(id);
}
@Override
@Transactional
public void updateUserFirstName(int id, String firstName) throws SomeException{
User userToUpdate = getUser(id);
if(userToUpdate == null){
throw new SomeException("User does not exist");
}
userToUpdate.setFirstName(firstName);
serviceDAO.updateUser(userToUpdate);
}
}
Run Code Online (Sandbox Code Playgroud)
DAO实施
public class UserServiceDAOImpl implements UserServiceDAOInt{
@PersistenceContext(unitName="myUnit")
private EntityManager entityManager;
@Override
public void updateUser(User user){
entityManager.merge(user);
}
}
Run Code Online (Sandbox Code Playgroud)
我甚至不确定是否需要合并调用.Spring如何知道要使用哪个EntityManager,因为UserServiceImpl类中没有EntityManager声明?
@Transactional当 Service 类中的一个方法有多个数据库调用时,我们标记一个 Service 层,我们希望所有调用都应该发生或没有一个应该发生,或者我们可以说如果任何调用失败,那么整个事务应该rollback。如果我们不符合此标准,那么我们也可以选择@TransactionalDAO 层。
由于 UserServiceImpl 类中没有 EntityManager 声明,Spring 如何知道要使用哪个 EntityManager?
Spring 指的是EntityManagerfrom persistence.xml(来自类路径),其结构类似于以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="myUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/YourDatasource</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |