This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openjpa.git
The following commit(s) were added to refs/heads/master by this push:
new 9113461 [OPENJPA-2883] 'supportsAutoAssign' is turned OFF when
'useTriggersForAutoAssign' is ON (#84)
9113461 is described below
commit 9113461cb98d2c608ad6cf4d703521a1d1780fec
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sat Oct 23 00:19:22 2021 +0700
[OPENJPA-2883] 'supportsAutoAssign' is turned OFF when
'useTriggersForAutoAssign' is ON (#84)
* [OPENJPA-2883] test for the issue
* [OPENJPA-2883] 'supportsAutoAssign' is turned OFF when
'useTriggersForAutoAssign' is ON
* Assert is improved
* Warning is logged when conflicting options are selected by user
* Build should be fixed
* EntityManager is properly closed
---
.gitignore | 1 +
.../apache/openjpa/jdbc/sql/OracleDictionary.java | 14 ++--
.../openjpa/jira_2883/TestOracleGeneratedId.java | 83 ++++++++++++++++++++++
.../src/it/sqlActionRefresh/pom.xml | 12 +++-
4 files changed, 105 insertions(+), 5 deletions(-)
diff --git a/.gitignore b/.gitignore
index bb0183f..38e2d26 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,5 @@ dependency-reduced-pom.xml
.idea
nb-configuration.xml
nbactions*.xml
+.checkstyle
diff --git
a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
index b8283bc..7deaea7 100644
---
a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
+++
b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/OracleDictionary.java
@@ -91,11 +91,13 @@ public class OracleDictionary
* using a trigger that inserts a sequence value into the
* primary key value when a row is inserted.
*/
+ @Deprecated
public boolean useTriggersForAutoAssign = false;
/**
* The global sequence name to use for autoassign simulation.
*/
+ @Deprecated
public String autoAssignSequenceName = null;
/**
@@ -181,6 +183,10 @@ public class OracleDictionary
maxEmbeddedClobSize = 4000;
inClauseLimit = 1000;
+ if (supportsAutoAssign && useTriggersForAutoAssign) {
+ log.warn("Both 'supportsAutoAssign' and 'useTriggersForAutoAssign'
were specified, such configuration will never work,"
+ + " please use 'supportsAutoAssign'");
+ }
// support auto increment columns
javax.persistence.GenerationType#IDENTITY
supportsAutoAssign = true;
autoAssignClause = "GENERATED ALWAYS AS IDENTITY";
@@ -289,7 +295,7 @@ public class OracleDictionary
public void endConfiguration() {
super.endConfiguration();
if (useTriggersForAutoAssign)
- supportsAutoAssign = true;
+ supportsAutoAssign = false;
}
@Override
@@ -1045,7 +1051,7 @@ public class OracleDictionary
setTimeouts(stmnt, conf, false);
rs = stmnt.executeQuery();
- List idxList = new ArrayList();
+ List<Index> idxList = new ArrayList<>();
while (rs != null && rs.next())
idxList.add(newIndex(rs));
return (Index[]) idxList.toArray(new Index[idxList.size()]);
@@ -1160,13 +1166,13 @@ public class OracleDictionary
return create;
Column[] cols = table.getColumns();
- List seqs = null;
+ List<String> seqs = null;
String seq, trig;
for (int i = 0; cols != null && i < cols.length; i++) {
if (!cols[i].isAutoAssigned())
continue;
if (seqs == null)
- seqs = new ArrayList(4);
+ seqs = new ArrayList<String>(4);
seq = autoAssignSequenceName;
if (seq == null) {
diff --git
a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jira_2883/TestOracleGeneratedId.java
b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jira_2883/TestOracleGeneratedId.java
new file mode 100644
index 0000000..3f4eefc
--- /dev/null
+++
b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/jira_2883/TestOracleGeneratedId.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.jira_2883;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EntityManager;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.persistence.test.DatabasePlatform;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+/**
+ * Tests that entity with generated id created as expected
+ *
+ * <A
HREF="https://issues.apache.org/jira/browse/OPENJPA-2883">OPENJPA-2883</A>
+ *
+ */
+@DatabasePlatform("oracle.jdbc.driver.OracleDriver")
+public class TestOracleGeneratedId extends SingleEMFTestCase {
+ @Override
+ public void setUp() {
+ super.setUp(CLEAR_TABLES, OraGenIdData.class,
+ "openjpa.jdbc.DBDictionary",
"oracle(UseTriggersForAutoAssign=true, MaxAutoAssignNameLength=28,
BatchLimit=100)");
+ }
+
+ public void testGeneratedId() {
+ EntityManager em = null;
+ try {
+ em = emf.createEntityManager();
+ assertFalse("'supportsAutoAssign' should be turned OFF",
(((JDBCConfiguration) emf.getConfiguration()).
+ getDBDictionaryInstance().supportsAutoAssign));
+ } finally {
+ if (em != null) {
+ em.close();
+ }
+ }
+ }
+
+ /**
+ * Declares a Version field of unsupported type.
+ *
+ */
+ @Entity
+ @Table(name="GeneratedId")
+ public class OraGenIdData {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private long id;
+
+ @Column(name = "value")
+ private String value;
+
+ public long getId() {
+ return id;
+ }
+
+ public String getValue() {
+ return value;
+ }
+ }
+}
diff --git a/openjpa-tools/openjpa-maven-plugin/src/it/sqlActionRefresh/pom.xml
b/openjpa-tools/openjpa-maven-plugin/src/it/sqlActionRefresh/pom.xml
index 2ec2d61..ed73d81 100644
--- a/openjpa-tools/openjpa-maven-plugin/src/it/sqlActionRefresh/pom.xml
+++ b/openjpa-tools/openjpa-maven-plugin/src/it/sqlActionRefresh/pom.xml
@@ -39,7 +39,17 @@
<dependency>
<groupId>org.apache.openjpa</groupId>
- <artifactId>openjpa</artifactId>
+ <artifactId>openjpa-kernel</artifactId>
+ <version>@pom.version@</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa-jdbc</artifactId>
+ <version>@pom.version@</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa-persistence</artifactId>
<version>@pom.version@</version>
</dependency>