我对Spring 3.2.3 @Transactional注解有疑问。我的服务类如下所示:
@Service @Transactional
class InventoryDisclosureBO {
@Autowired InventoryDisclosureDAO inventoryDisclosureDAO;
private static final Logger log = LoggerFactory.getLogger( InventoryDisclosureBO.class);
public void processDisclosureData(InventoryDisclosureStatus data){
validate(data);
persist(data);
}
@Transactional(propagation = REQUIRES_NEW)
void persist(InventoryDisclosureStatus data) {
inventoryDisclosureDAO.setAllInvalid( data.getUnit());
inventoryDisclosureDAO.insert( data );
}
void validate(InventoryDisclosureStatus data) {
...
}
}
如果我调用persist()方法,所有方法都可以正常工作。但是,如果我在类级别将@Transactional注释掉-
事务将不会启动。谁能告诉我为什么Spring只能在methol级忽略@Transactional?
您不能从processDisclosureData()调用persist(),因为它属于同一类,并且它将绕过Spring为InventoryDisclosureBO创建的事务代理。您应该从其他bean调用它以使@Transactional批注起作用。当Spring将对InventoryDisclosureBO
Bean的引用注入其他Bean时,它实际上是对InventoryDisclosureBOProxy的引用进行注入,该引用包含事务逻辑,例如
class Bean2 {
@Autowire
private InventoryDisclosureBO idbo; <-- Spring will inject a proxy here
public void persist(InventoryDisclosureStatus data) {
idbo.persist(data); <-- now it will work via proxy
}
...
我对@Transactional annotation和EntityManager persist和merge方法有奇怪的行为。我将method注释为@transactional,并在其中调用EntityManager.persists(entity)...但什么也没有发生。实体没有保存到数据库,没有激发异常,完全没有。我已经读了大量的例子,所以问题,我的代码看起来很好,但不工作。 实体: 道:
我不明白的第一个例子是,下面只打印“warning:root:hello from warn”。如果我理解正确的话,“logging.info”实际上调用根记录器,而根记录器默认为警告级别。所以第一个“Hello from Info”被忽略,这很好。但为什么第二个“你好从信息”也没有打印出来? 第二个问题是处理程序和记录器的日志级别。如果我们同时为处理程序和记录器设置日志级别,那么哪一个是有效的?
问题内容: 我正在学习有关Java的知识,并且一直困扰着这个问题:当我尝试使用简单的方法(例如)时,编译器给我错误。这是代码: 该方法在Javadoc中定义。 这样做应该很简单,但是我真的不知道我在做什么错。 问题答案: 您已经创建了自己的类,并且没有使用内置的Java类。您尚未定义。
我正在使用演示APi(http://dummy.restapiexample.com/update) 我有一个响应类UpdateResponse 我有一个Api类和一个APIInterface 和对话框而不是主活动 在APIInterface中使用PUT方法有一个@path(id)和三个@fields(name、salary、age) 下面是UpdateResponse类代码 Api接口代码如下
使用spring4@transactional和jdbctemplate时事务不起作用!!请帮帮我 application.xml 代理创建失败?
我使用@Transactional与Spring引导和jpa。但它不起作用。有人能帮忙吗? 我的插件在myDAO中,它是在服务类中自动生成的。下面的代码是实现服务接口的服务类的方法