2012-01-09 54 views
1

有兩個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"; 
} 

的問題是:我怎麼用隔離或只讀分配的水平? @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 2012-01-09 15:05:35