1

JpaTransactionManager 有两个bean。

可以使用限定符符号来管理它们。

<bean id="transactionManagerConstant" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="constant"/>

    <qualifier value="first"/>
</bean>

<bean id="transactionManagerRelative" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="relative"/>
    <qualifier value="second"/>
</bean>

Java代码:

@Transactional("first")
public String saveWork(){

    em1.persist(work);
    work = (Work) ctx.getBean("work");
    return "/workLists.xhtml";
}

@Transactional("second")
public String saveEvent(){

    em2.persist(event);
    event = (Event) ctx.getBean("event");

    return "/eventLists.xhtml";
}

问题是:如何使用隔离级别或只读分配?@Qualifier 注释不起作用:

@Transactional(isolation = Isolation.SERIALIZABLE, propagation=Propagation.REQUIRED, readOnly = false)
@Qualifier("first")
public String saveWork(){

    em1.persist(work);
    work = (Work) ctx.getBean("work");
    return "/workLists.xhtml";
}

@Transactional(isolation = Isolation.SERIALIZABLE, propagation=Propagation.REQUIRED, readOnly = false)
@Qualifier("second")
public String saveEvent(){

    em2.persist(event);
    event = (Event) ctx.getBean("event");

    return "/eventLists.xhtml";
}

我怎么解决这个问题?

4

1 回答 1

0

您应该将@Qualifier注释放在成员上TransactionManager,而不是使用它的方法上。

以下假设em1em2是在TransactionManager上面的弹簧配置中定义的。

@Autowired
@Qualifier("first")
private TransactionManager em1;

@Autowired
@Qualifier("second")
private TransactionManager em2;

@Transactional(isolation = Isolation.SERIALIZABLE, propagation=Propagation.REQUIRED, readOnly = false)
public String saveWork(){

    em1.persist(work);
    work = (Work) ctx.getBean("work");
    return "/workLists.xhtml";
}

@Transactional(isolation = Isolation.SERIALIZABLE, propagation=Propagation.REQUIRED, readOnly = false)
public String saveEvent(){

    em2.persist(event);
    event = (Event) ctx.getBean("event");

    return "/eventLists.xhtml";
}
于 2012-01-09T14:52:24.080 回答