1

2 つの bean JpaTransactionManager があります。

修飾子表記で管理できます。

<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";
}

問題は、分離レベルまたは readOnly 割り当てをどのように使用するかです。@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それを使用するメソッドではなく、メンバーに配置する必要があります。

em1以下では、およびem2TransactionManager上記のスプリング構成で定義された であると想定しています。

@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 に答える