我正在编写一个简单的Bean,要使用表名进行配置,一个包含一些数据的XML文件,以便在应用程序启动时如果该表为空,则将使用该数据进行初始化。我决定使用简单的SQL查询,但无法从sessionfactory获得 session ,因为它说:
但这是配置(非常类似于服务):
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
<tx:annotation-driven />
<bean id="ordiniVecchioSistemaLoader" class="it.jsoftware.jacciseweb.assistenza.common.ExcelXmlDataLoader">
<property name="xmlFileName" value="WEB-INF/data/daticlientijaccisemarco.xml"></property>
</bean>
<bean id="vecchiOrdiniFiller" class="it.jsoftware.jacciseweb.assistenza.common.BaseTableFiller" init-method="init">
<property name = "sessionFactory" ref = "mySessionFactory"></property>
<property name="loader" ref="ordiniVecchioSistemaLoader"></property>
<property name="tableCreationString" value="CREATE TABLE `vecchiordini` ( `ID` INT(11) NOT NULL AUTO_INCREMENT, `codicejazz` VARCHAR(255) DEFAULT NULL, `progressivolicenza` INT(11), `codicearticolo` VARCHAR(255) DEFAULT NULL, `rivenditore` VARCHAR(255) DEFAULT NULL, `cliente` VARCHAR(255) DEFAULT NULL, PRIMARY KEY (`ID`)) ENGINE=INNODB DEFAULT CHARSET=utf8"></property>
<property name="table" value="vecchiordini"></property>
<property name="tableColumns">
<list>
<value>codicejazz</value>
<value>progressivolicenza</value>
<value>codicearticolo</value>
<value>rivenditore</value>
<value>nomecliente</value>
</list>
</property>
<property name="loaderColumns">
<list>
<value>clicod</value>
<value>licsmatricola</value>
<value>artcod</value>
<value>rivenditore</value>
<value>cliente</value>
</list>
</property>
</bean>
我用@Transactional注释了init()方法。但是它没有开始交易,我得到了这个错误:
@Transactional
public void init() throws Exception {
logger.info("BaseTableFilter per tabella: " + table + ", usando: "
+ loader.getSourceName());
Session session = dao.getSession();
Transaction tx = session.beginTransaction();
...
为什么不起作用?
最佳答案
不使用init-method
或@PostConstruct
注释的方法,因此您将无法在其上使用@Transactional。您应该在服务上使用@Transactional,为什么这不适合您?
引用自SpringSource Jira:
如前所述,您可以尝试使用mode="aspectj"
,但我认为您应该查看自己的设计。
关于sql - 为什么我不能在Spring中使这个bean @Transactional?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6412448/