gpt4 book ai didi

spring - InvalidDataAccessApiUsageException : Executing an update/delete query Spring XML to Java config

转载 作者:行者123 更新时间:2023-12-04 22:18:52 24 4
gpt4 key购买 nike

我正在尝试将 spring xml 配置转换为 java 配置。这通过 XML 配置完美地工作。但是,如果我使用 java 配置初始值设定项,它会引发以下异常。当它尝试运行 JQL 时会发生这种情况。应用程序正常启动(所有 JPA 映射都已初始化)。

org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:410) [spring-orm-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:216) [spring-orm-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417) [spring-orm-4.1.5.RELEASE.jar:4.1.5.RELEASE]
at org.springframework.dao.support.ChainedPersistenceExceptionTranslat

以下是我的持久化初始化器类。一些阅读建议我这与交易未正确启动有关。我已经为这些方法中的每一个设置了调试点,但是在服务器启动期间或以后的任何时间都不会执行 transactionManager 方法。我不确定我做错了什么:(。当持久性通过 persistence.xml 初始化时,基于相同代码的工作完美无缺。
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "au.mypkg")
public class DatabaseConfig {


@Bean(name = "dataSource")
@Primary
public DataSource dataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:jboss/datasources/mydb");
}

@PersistenceContext(unitName = "persistenceUnit")
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws Exception {
..........

@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
final JtaTransactionManager transactionManager = new JtaTransactionManager();
transactionManager.setTransactionManagerName(JBOSS_TRANSACTION_MANANGER);
return transactionManager;
}

在 Dao 上访问该方法时出现错误
   public void updateById(final Long id) {

final String sqlQuery = "UPDATE testtable w SET w.LAST_ACCESSED = :date WHERE w.testtable_ID = :testid";
final Query query = dao.createNativeQuery(sqlQuery);
query.setParameter("date", new Date());
query.setParameter("testid", id);
query.executeUpdate();
}

最佳答案

我遇到了一些问题,我通过在执行删除或更新的服务方法上添加 @Transactional 注释来解决它。
就我而言,这是一种调用存储库方法的方法,该方法通过 jpql 执行删除操作,我认为它也可以解决您的问题:

@Modifying    
@Query("delete from OtherPayment otherPayment " +
"where otherPayment.otherPaymentParam.id = :otherPaymentParamId")
void deleteByOtherPaymentParamId(@Param("otherPaymentParamId") Long otherPaymentParamId);

关于spring - InvalidDataAccessApiUsageException : Executing an update/delete query Spring XML to Java config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44322974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com