首页 > 解决方案 > Oracle 中的 Spring Data JPA + EclipseLink

问题描述

我有这个存储库:

@Repository
public interface EnvaRepository extends JpaRepository<Enva, Long> {
}

这个查询:

 envaRepository.findAllById(lopn.getEnvans());

但在控制台上我有这个错误:

SELECT t0.PERSONNE_ID, t0.DT_NAISSANCE, t1.PERSONNE_ID FROM PERSONNE t0, ENVA t1
WHERE ((t0.PERSONNE_ID IN ((777,777))) AND (t1.PERSONNE_ID = t0.PERSONNE_ID));

[42000][907] ORA-00907: parenthèse de droite absente

我的配置类:

@Configuration
public class JpaConfiguration extends JpaBaseConfiguration {

    protected JpaConfiguration(DataSource dataSource, JpaProperties properties, ObjectProvider<JtaTransactionManager> jtaTransactionManager, ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
        super(dataSource, properties, jtaTransactionManager, transactionManagerCustomizers);
    }

    @Override
    protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
        log.debug("Using EclipseLinkJpaVendorAdapter");
        return new EclipseLinkJpaVendorAdapter();
    }

    @Bean
    @Primary
    public static JpaProperties properties() {
        final JpaProperties jpaProperties = new JpaProperties();
        jpaProperties.setShowSql(true);
        jpaProperties.setDatabasePlatform("org.eclipse.persistence.platform.database.OraclePlatform");
        return jpaProperties;
    }

    @Override
    protected Map<String, Object> getVendorProperties() {
        HashMap<String, Object> map = new HashMap<>();
        map.put(PersistenceUnitProperties.WEAVING, detectWeavingMode());
        return map;
    }

    private String detectWeavingMode() {
        return InstrumentationLoadTimeWeaver.isInstrumentationAvailable() ? "true" : "static";
    }
}

标签: sqloraclespring-bootspring-data-jpaeclipselink

解决方案


在你的 IN 语句中去掉额外的括号,如下所示:

SELECT t0.PERSONNE_ID, t0.DT_NAISSANCE, t1.PERSONNE_ID 
FROM PERSONNE t0, ENVA t1
WHERE ((t0.PERSONNE_ID IN (777,777)) 
AND (t1.PERSONNE_ID = t0.PERSONNE_ID));

推荐阅读