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 <solomax...@gmail.com>
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>
 

Reply via email to