GVKun编程网logo

Spring @Transaction方法由同一类中的方法调用,不起作用吗?(spring中transaction不生效)

21

此处将为大家介绍关于Spring@Transaction方法由同一类中的方法调用,不起作用吗?的详细内容,并且为您解答有关spring中transaction不生效的相关问题,此外,我们还将为您介绍关

此处将为大家介绍关于Spring @Transaction方法由同一类中的方法调用,不起作用吗?的详细内容,并且为您解答有关spring中transaction不生效的相关问题,此外,我们还将为您介绍关于@Transactional在方法级别不起作用、@Transactional方法调用没有@Transactional注释的另一个方法?、asp.net – 使用jQuery调用MVC中的action方法,参数不起作用、before_action :find_transaction 不起作用 rails api的有用信息。

本文目录一览:

Spring @Transaction方法由同一类中的方法调用,不起作用吗?(spring中transaction不生效)

Spring @Transaction方法由同一类中的方法调用,不起作用吗?(spring中transaction不生效)

我是Spring Transaction的新手。我发现有些事情很奇怪,也许我确实理解得很清楚。我想在方法级别周围进行事务处理,而我在同一个类中有一个调用者方法,似乎不喜欢它,必须从单独的类中调用它。我不知道怎么可能。如果有人知道如何解决此问题,我将不胜感激。我想使用相同的类来调用带注释的事务方法。

这是代码:

public class UserService {    @Transactional    public boolean addUser(String userName, String password) {        try {            // call DAO layer and adds to database.        } catch (Throwable e) {            TransactionAspectSupport.currentTransactionStatus()                    .setRollbackOnly();        }    }    public boolean addUsers(List<User> users) {        for (User user : users) {            addUser(user.getUserName, user.getPassword);        }    } }

答案1

小编典典

这是Spring AOP(动态对象和cglib)的局限性。

如果你将Spring配置为使用AspectJ处理事务,那么你的代码将起作用。

最简单且可能最好的选择是重构代码。例如,一个处理用户的类和一个处理每个用户的类。然后,Spring AOP的默认事务处理将起作用。

使用AspectJ处理事务的配置技巧

为了使Spring能够将AspectJ用于事务,必须将模式设置为AspectJ:

<tx:annotation-driven mode="aspectj"/>

如果你使用的Spring版本低于3.0,则还必须将其添加到Spring配置中:

<beanfactory-method="aspectOf">    <property name="transactionManager" ref="transactionManager" /></bean>

@Transactional在方法级别不起作用

@Transactional在方法级别不起作用

我对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?

@Transactional方法调用没有@Transactional注释的另一个方法?

@Transactional方法调用没有@Transactional注释的另一个方法?

我在Service类中看到了一种被标记为的方法@Transactional,但是它也在同一类中调用了其他未标为的方法@Transactional

这是否意味着对单独方法的调用导致应用程序打开与DB的单独连接或暂停父事务等?

不带任何注释的方法的默认行为是什么,而另一个带有@Transactional注释的方法调用该方法的默认行为是什么?

asp.net – 使用jQuery调用MVC中的action方法,参数不起作用

asp.net – 使用jQuery调用MVC中的action方法,参数不起作用

我正在尝试使用jQuery在MVC应用程序中调用一个action方法.基本上我想要的是获取几个输入字段的值,并通过单击按钮调用操作方法,将输入字段的值作为参数传递.但我只得到“数字”参数的值,而不是“年”参数.

function selectWeek() {
        $('#selectWeekButton').click(function (event) {
            var number = $("#selectWeekId").val();
            var year = $("#selectYearId").val();
            var actionUrl = '<%: Url.Action("Edit",new { number="WEEKPLACEHOLDER",year="YEARPLACEHOLDER" }) %>'

            var yearUrl = actionUrl.replace('YEARPLACEHOLDER',year);

            var url = yearUrl.replace('WEEKPLACEHOLDER',number);
            alert(url);
            $.get(url,function (data) {
                alert('Test');
            });
        });
    }

正如您所看到的,我用警报检查了网址,并且它似乎包含两个值都很好.但是当我在action方法中检查year参数的值时,它为null.

以下是输入字段:

<span>Vecka: </span>
        <input type="text" id="selectWeekId" />
        <span>År: </span>
        <input type="text" id="selectYearId" />
        <input type="button" value="Välj vecka" id="selectWeekButton" />

并且动作方法的开头:

public ActionResult Edit(string number,string year) 
//etc...

我知道这看起来很奇怪,而不仅仅是绑定字段,但原因是这些输入字段及其值不是此View的主要目的.他们只是在这个时间表应用程序中选择另一周.此外,我最终将用jQuery日历替换输入字段,所以我仍然必须做这样的事情.

那么最简单的方法是什么,为什么它不能正常工作呢?

解决方法

我通常使用$.get方法的jQuery第二个参数来输入URL参数.这是一篇文章(asp.net mvc 1,但仍然是一个有效的例子):

http://blog.bobcravens.com/2009/11/ajax-calls-to-asp-net-mvc-action-methods-using-jquery/

before_action :find_transaction 不起作用 rails api

before_action :find_transaction 不起作用 rails api

你应该这样做

before_action :find_transaction,only: [:show,:update,:destroy]

你拥有它的方式是创建一个字符串而不是一个数组

irb(main):001:0> %[show,update,destroy]
=> "show,destroy"

我尝试了你的方法,看看它是否有效,但它没有。如果您将其更改为我的建议,它确实如此。

关于Spring @Transaction方法由同一类中的方法调用,不起作用吗?spring中transaction不生效的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于@Transactional在方法级别不起作用、@Transactional方法调用没有@Transactional注释的另一个方法?、asp.net – 使用jQuery调用MVC中的action方法,参数不起作用、before_action :find_transaction 不起作用 rails api的相关知识,请在本站寻找。

本文标签: