2012-01-09 9 views
1

Bean JpaTransactionManagerは2つあります。複数トランザクションマネージャAnnotationを使用したSpringコンフィグレーション

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

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

どのように私はこの問題を解決することができますか?

答えて

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

こんにちはニコラス。これはTransactionManagerオブジェクト、javax.transaction.TransactionManagerオブジェクトですか?永続操作はこのオブジェクトで行われますか? – hakdogan

関連する問題