Hibernate IdentityColumnSupportImpl не поддерживает генерацию Identity Key - PullRequest
0 голосов
/ 31 октября 2018

У меня есть два разных источника данных в весеннем загрузочном проекте. Одно из имен схемы источника данных - мошенничество, а другое - test. Когда я пытаюсь вставить объект в таблицу, я получаю сообщение об ошибке, например

java.lang.IllegalArgumentException: org.hibernate.dialect.identity.IdentityColumnSupportImpl does not support identity key generation

Я пытался решить эту проблему

org.hibernate.dialect.OracleDialect не поддерживает генерацию идентификационных ключей

Но этот выдает ошибку, такую ​​как

ORA-02289: sequence does not exist

Спасибо

CONTROLLER

            if (channel.isAnyConvertionFailed()) {
                FraudChannelException fce = new FraudChannelException(/*Params*/);
                fraudChannelExceptionRepository.save(fce);
            }

            //Check if any mandatory fields are empty
            if (/*condition*/){
                FraudChannelException fce = new FraudChannelException(/*Params*/);
                fraudChannelExceptionRepository.save(fce);

                return ExceptionConfiguration.handleMissingFieldError(message);
            }

СКЛАД

@Repository
public interface FraudChannelExceptionRepository extends CrudRepository<FraudChannelException, Integer> {

}

ЛИЦО

@Entity
@Table(name="fraud_channel_exceptions", schema = "fraud")
public class FraudChannelException implements Serializable {
    @Id
    @Column(name = "ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    //more fields

    public FraudChannelException(/*PARAMS*/) {
        //init something
    }

    public FraudChannelException(/*PARAMS*/) {
        //init something
    }

    public FraudChannelException(/*PARAMS*/) {
        //init something
    }

    public FraudChannelException() {
    }

    //Getter Setter
}

CONFIG

@Configuration
@PropertySource({ "classpath:application.properties" })
@EnableJpaRepositories(basePackages = "com.ykb.frd.fraudcore.schema.fraud.repo",entityManagerFactoryRef = "entityManager",transactionManagerRef = "transactionManager")
public class FraudConfig{
    @Autowired
    private Environment env;

    @Bean
    @Primary
    public LocalContainerEntityManagerFactoryBean entityManager() {
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource());
        em.setPackagesToScan("com.ykb.frd.fraudcore.schema.fraud.domain");

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        HashMap<String, Object> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
        em.setJpaPropertyMap(properties);

        return em;
    }

    @Primary
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource= new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("fraud.datasource.driverClassName"));
        dataSource.setUrl(env.getProperty("fraud.datasource.url"));
        dataSource.setUsername(env.getProperty("fraud.datasource.username"));
        dataSource.setPassword(env.getProperty("fraud.datasource.password"));

        return dataSource;
    }

    @Primary
    @Bean
    public PlatformTransactionManager transactionManager() {
        JpaTransactionManager transactionManager= new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(entityManager().getObject());
        return transactionManager;
    }
}

APPLICATION.PROPERTIES

# EBNKTST - NDVLIVE
ndvlive.datasource.url=jdbc:oracle:thin:@//URL
ndvlive.datasource.username=//USERNAME
ndvlive.datasource.password=//PASSWORD
ndvlive.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

# EBNKDEV - FRAUD
fraud.datasource.url=jdbc:oracle:thin:@//URL
fraud.datasource.username=//USERNAME
fraud.datasource.password=//PASSWORD
fraud.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

# logging
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n
logging.level.org.hibernate.SQL=debug

1 Ответ

0 голосов
/ 29 июля 2019

Hibernate ожидает от базовой базы данных функции автоинкремента для данного свойства, в вашем случае это id. Итак, Oracle (ваш случай) должен поддерживать функцию автоматического увеличения поля. Oracle начала предоставлять функцию автоинкремента с 12c версией , и, поскольку ваша версия меньше, вы получаете это исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...