小编Mat*_* S.的帖子

如何按名称设置django模型字段?

这似乎应该是死的简单,所以我必须遗漏一些东西.我只想按名称设置模型实例中字段的值.说我有:

class Foo(Model):
  bar = CharField()

f = Foo()
Run Code Online (Sandbox Code Playgroud)

我想按名称设置bar的值,而不是通过访问该字段.所以类似于:

f.fields['bar'] = 'BAR"
Run Code Online (Sandbox Code Playgroud)

代替

f.bar = 'BAR'
Run Code Online (Sandbox Code Playgroud)

我已经尝试过setattr,但它不会在数据库中保留该值.我也尝试过_meta.fields,但在此过程中遇到了各种错误.

django django-models

31
推荐指数
2
解决办法
2万
查看次数

EJB3事务传播

我有一个无状态的豆类似于:

@Stateless
public class MyStatelessBean implements MyStatelessLocal, MyStatelessRemote {
    @PersistenceContext(unitName="myPC")
    private EntityManager mgr;

    @TransationAttribute(TransactionAttributeType.SUPPORTED)
    public void processObjects(List<Object> objs) {
        // this method just processes the data; no need for a transaction
        for(Object obj : objs) {
            this.process(obj);
        }
    }

    @TransationAttribute(TransactionAttributeType.REQUIRES_NEW)
    public void process(Object obj) {
        // do some work with obj that must be in the scope of a transaction

        this.mgr.merge(obj);
        // ...
        this.mgr.merge(obj);
        // ...
        this.mgr.flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

通常用法是客户端将调用processObjects(...),它实际上不与实体管理器交互.它完成了它需要做的事情,并为每个要处理的对象单独调用进程(...).进程的持续时间(...)相对较短,但是processObjects(...)可能需要很长时间来运行所有内容.因此我不希望它维持一个开放的交易.我确实需要单独的进程(...)操作才能在自己的事务中运行.这应该是每次通话的新交易.最后,我想保持选项打开,让客户端直接调用进程(...).

我尝试了许多不同的事务类型:从不,不支持,支持(在processObjects上)和required,需要new(on process)但每次调用merge()时都会得到TransactionRequiredException.

我已经能够通过将方法分成两个不同的bean来使它工作:

@Stateless
@TransationAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class MyStatelessBean1 …
Run Code Online (Sandbox Code Playgroud)

transactions java-ee ejb-3.0

26
推荐指数
1
解决办法
2万
查看次数

标签 统计

django ×1

django-models ×1

ejb-3.0 ×1

java-ee ×1

transactions ×1