我是spring和hibernate的新用户。 我有一个服务类,该类由控制器调用。 呼叫流程如下:
我发现的问题是:
我的问题是:
谢谢。
伪代码如下:
@org.springframework.stereotype.Service("myService")
public class MyService {
@Autowired
private MyDao dao;
// if the @Transactional is only put here as this, entities will NOT be saved to database.
@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public MyEntity persistEnity(MyEntity toBeSaved) {
MyEntity entity = dao.persistEntity(toBeSaved);
return entity;
}
// if the @Transactional is only put here, entities will be saved to database.
// @Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, rollbackFor = Exception.class)
public ServiceObject create(ServiceObject serviceObject, User user) {
MyEntity entity = convertToEntity(serviceObject);
entity = persistEnity(dao);
return convertTOServiceObject(entity);
}
...
}
答案 0 :(得分:0)
因为方法convertToEntity
在MyEntity
中创建对象类型create
,并且如果该方法是事务性的,则该对象将被附加到会话中。但是,如果该方法不是事务性的,则可以在会话外创建新对象并将其发送到persistEnity
,但是该对象没有附加,因此dao无法在没有新附加到会话的情况下保存它。
在创建对象的方法上保留事务性,或将其附加到persistEnity
方法的会话中。