Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA禁用ALTER序列的执行_Java_Oracle_Spring Boot_Jpa_Spring Batch - Fatal编程技术网

Java JPA禁用ALTER序列的执行

Java JPA禁用ALTER序列的执行,java,oracle,spring-boot,jpa,spring-batch,Java,Oracle,Spring Boot,Jpa,Spring Batch,我有一个SpringBatch和SpringBoot应用程序,它带有一个Oracle钱包,用于连接和打开JPA以处理持久性。我有一些实体,它们的主键是通过数据库中的序列管理的,例如: CREATED 11/11/11 LAST_DDL_TIME 11/11/11 SEQUENCE_OWNER EXAMPLE SEQUENCE_NAME EXAMPLE_SEQ MIN_VALUE 1 MAX_VALUE 9999999999999999999999999999 INCREMENT

我有一个SpringBatch和SpringBoot应用程序,它带有一个Oracle钱包,用于连接和打开JPA以处理持久性。我有一些实体,它们的主键是通过数据库中的序列管理的,例如:

CREATED 11/11/11
LAST_DDL_TIME   11/11/11
SEQUENCE_OWNER  EXAMPLE
SEQUENCE_NAME   EXAMPLE_SEQ
MIN_VALUE   1
MAX_VALUE   9999999999999999999999999999
INCREMENT_BY    1
CYCLE_FLAG  N
ORDER_FLAG  N
CACHE_SIZE  20
LAST_NUMBER 1111
以及相应的实体名称:

@Id 
@SequenceGenerator(name="seq_examples", sequenceName="EXAMPLE_SEQ", allocationSize = 1)  
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_examples")
@Column (name="ID_EXAMPLE", nullable=false)
private Integer id_example;
有了这段代码,JPA不断地尝试执行ALTER序列,读了很多关于这方面的内容,我有两种方法来解决这个问题,一种是Spring引导配置文件,另一种是persistence.xml配置文件

我已经尝试了这两种方法:config->

@配置 公共类上下文配置{

    @Bean(name="springtest_entitymanager")
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryBean(
    @Qualifier("vendorAdapter") JpaVendorAdapter jpaVendorAdapter, 
    @Value("${${enviroment}.databaseSchema}") String databaseSchema,
    @Qualifier("datasourceWalletExampleDB") DataSource dataSource,
    //@Value("${ConnectionFactoryProperties}") String ConnectionFactoryProperties,
    @Value("${${enviroment}.openjpa.ConnectionFactoryProperties}") String 
ConnectionFactoryProperties,
    @Value("${${enviroment}.openjpa.log}") String logLevel
    ){

Map<String, String> jpaProperties = new HashMap<String, String>();
jpaProperties.put("openjpa.jdbc.Schema", databaseSchema);
jpaProperties.put("openjpa.Log", logLevel); 
jpaProperties.put("openjpa.ConnectionFactoryProperties", ConnectionFactoryProperties);

jpaProperties.put("openjpa.jdbc.DBDictionary.disableAlterSequenceIncrementBy", "true");

//debug only
//jpaProperties.put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");

LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new 
LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setPersistenceUnitName("pu_Example");
localContainerEntityManagerFactoryBean.setDataSource(dataSource);
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
localContainerEntityManagerFactoryBean.setJpaPropertyMap(jpaProperties);
return localContainerEntityManagerFactoryBean;
@Bean(name=“springtest\u entitymanager”)
public LocalContainerEntityManagerFactoryBean getEntityManagerFactoryBean(
@限定符(“供应商适配器”)JpaVendorAdapter JpaVendorAdapter,
@值(“${${Environment}.databaseSchema}”)字符串databaseSchema,
@限定符(“datasourceWalletExampleDB”)数据源数据源,
//@值(“${ConnectionFactoryProperties}”)字符串ConnectionFactoryProperties,
@值(“${${Environment}.openjpa.ConnectionFactoryProperties}”)字符串
ConnectionFactoryProperties,
@值(“${${Environment}.openjpa.log}”)字符串日志级别
){
Map jpaProperties=newhashmap();
jpaProperties.put(“openjpa.jdbc.Schema”,databaseSchema);
jpaProperties.put(“openjpa.Log”,logLevel);
jpaProperties.put(“openjpa.ConnectionFactoryProperties”,ConnectionFactoryProperties);
put(“openjpa.jdbc.DBDictionary.disableAlterSequenceIncrementBy”,“true”);
//仅调试
//jpaProperties.put(“openjpa.jdbc.SynchronizeMappings”,“buildSchema(ForeignKeys=true)”;
LocalContainerEntityManagerFactoryBean LocalContainerEntityManagerFactoryBean=新建
LocalContainerEntityManagerFactoryBean();
localContainerEntityManagerFactoryBean.setPersistenceUnitName(“pu_示例”);
localContainerEntityManagerFactoryBean.setDataSource(dataSource);
localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
localContainerEntityManagerFactoryBean.setJPapPropertyMap(JPapProperties);
返回localContainerEntityManagerFactoryBean;
}

和持久性->

<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

<class>exampleapp.dao.model.Example</class>


<properties>
    <property name="openjpa.Log" value="DefaultLevel=ERROR" />
    <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, 
PrettyPrintLineLength=72" />
    <property name="openjpa.jdbc.Schema" value="EXAMPLE" />
    <property name="openjpa.jdbc.DBDictionary" value="DisableAlterSeqenceIncrementBy=true" />

</properties>

org.apache.openjpa.persistence.PersistenceProviderImpl
exampleapp.dao.model.Example

但是它仍然在执行ALTERSEQUENCE语句,我还能做什么呢

我已经读过的一些信息:

感谢阅读本文的所有人,这两个属性(persistence.xml/configuration class)工作正常,但我必须使用alter sequence权限运行应用程序至少一次,可能在第一次运行时JPA和DB之间的某些pk不同步,我认为是因为DB缓存。在这种情况下,DB是从另一个环境迁移的

在使用alter sequence特权运行之后,特权被删除,在再运行几次之后,我没有看到任何问题

我在序列缓存中找到的有用信息以及我的帮助他人:


你检查了吗?是的,我检查了,结果相同。