You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by il...@apache.org on 2016/08/12 06:50:13 UTC

svn commit: r1756081 - /openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/

Author: ilgrosso
Date: Fri Aug 12 06:50:13 2016
New Revision: 1756081

URL: http://svn.apache.org/viewvc?rev=1756081&view=rev
Log:
[OPENJPA-2651] Applying Heath Thomann's patch for 2.2.x to 2.3.x

Added:
    openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/
    openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java   (with props)
    openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java   (with props)
    openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java   (with props)
    openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java   (with props)

Added: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java?rev=1756081&view=auto
==============================================================================
--- openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java (added)
+++ openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java Fri Aug 12 06:50:13 2016
@@ -0,0 +1,56 @@
+/*
+ * 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.persistence.query.sqlresultmapping;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@javax.persistence.Table(name = "CRT_OPERACAO")
+@Entity
+public class CrtOperacaoEntity implements Serializable {
+
+    private static final long serialVersionUID = -3914425448077243671L;
+    
+    @Column(name = "ID")
+    @Id
+    private long id;
+
+    public long getId() {
+        return this.id;
+    }
+
+    public void setId(final long id) {
+        this.id = id;
+    }
+
+    @Column(name = "DATA_HORA")
+    private Timestamp dataHora;
+
+    public Timestamp getDataHora() {
+        return this.dataHora;
+    }
+
+    public void setDataHora(final Timestamp dataHora) {
+        this.dataHora = dataHora;
+    }
+}

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtOperacaoEntity.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java?rev=1756081&view=auto
==============================================================================
--- openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java (added)
+++ openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java Fri Aug 12 06:50:13 2016
@@ -0,0 +1,64 @@
+/*
+ * 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.persistence.query.sqlresultmapping;
+
+import javax.persistence.Entity;
+import javax.persistence.EntityResult;
+import javax.persistence.FieldResult;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+import javax.persistence.SqlResultSetMapping;
+
+@javax.persistence.Table(name = "CRT_REQUISICAO_CHEQUE_PERS")
+@Entity
+@SqlResultSetMapping(name = "MyResultMapping", entities = {
+    @EntityResult(entityClass = CrtRequisicaoChequePersEntity.class, fields = {
+        @FieldResult(name = "crtOperacaoByOperacaoRecepcaoServCent.id", 
+                column = "opRecepcaoServCentraisId"),
+        @FieldResult(name = "crtOperacaoByOperacaoRecepcaoServCent.dataHora", 
+                column = "opRecepcaoServCentraisDataHora") }) })
+public class CrtRequisicaoChequePersEntity extends CrtRequisicaoEntity {
+
+    @ManyToOne
+    @javax.persistence.JoinColumn(name = "OPERACAO_RECEPCAO_SERV_CENT", referencedColumnName = "ID")
+    private CrtOperacaoEntity crtOperacaoByOperacaoRecepcaoServCent;
+
+    public CrtOperacaoEntity getCrtOperacaoByOperacaoRecepcaoServCent() {
+        return this.crtOperacaoByOperacaoRecepcaoServCent;
+    }
+
+    public void setCrtOperacaoByOperacaoRecepcaoServCent(
+        final CrtOperacaoEntity crtOperacaoByOperacaoRecepcaoServCent) {
+        this.crtOperacaoByOperacaoRecepcaoServCent =
+            crtOperacaoByOperacaoRecepcaoServCent;
+    }
+
+    @ManyToOne
+    @javax.persistence.JoinColumn(name = "OPERACAO_REQUISICAO", referencedColumnName = "ID", nullable = false)
+    private CrtOperacaoEntity crtOperacaoByOperacaoRequisicao;
+
+    public CrtOperacaoEntity getCrtOperacaoByOperacaoRequisicao() {
+        return this.crtOperacaoByOperacaoRequisicao;
+    }
+
+    public void setCrtOperacaoByOperacaoRequisicao(
+        final CrtOperacaoEntity crtOperacaoByOperacaoRequisicao) {
+        this.crtOperacaoByOperacaoRequisicao = crtOperacaoByOperacaoRequisicao;
+    }
+}

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoChequePersEntity.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java?rev=1756081&view=auto
==============================================================================
--- openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java (added)
+++ openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java Fri Aug 12 06:50:13 2016
@@ -0,0 +1,44 @@
+/*
+ * 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.persistence.query.sqlresultmapping;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.OneToOne;
+
+@javax.persistence.Table(name = "CRT_REQUISICAO")
+@Entity
+@Inheritance(strategy = InheritanceType.JOINED)
+public class CrtRequisicaoEntity {
+    @Column(name = "ID")
+    @Id
+    private long id;
+
+    public long getId() {
+        return this.id;
+    }
+
+    public void setId(final long id) {
+        this.id = id;
+    }
+}

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/CrtRequisicaoEntity.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java?rev=1756081&view=auto
==============================================================================
--- openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java (added)
+++ openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java Fri Aug 12 06:50:13 2016
@@ -0,0 +1,128 @@
+/*
+ * 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.persistence.query.sqlresultmapping;
+
+import java.sql.Timestamp;
+import java.util.List;
+import java.util.Properties;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.Query;
+
+import org.apache.openjpa.persistence.querycache.QCEntity;
+import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+
+/*
+ * Test for OPENJPA-2651.
+ */
+public class TestSQLResultSetMapping extends SingleEMFTestCase {
+
+    public void setUp() {
+        super.setUp(DROP_TABLES, CrtOperacaoEntity.class,
+            CrtRequisicaoEntity.class, CrtRequisicaoChequePersEntity.class);
+
+        // Set up necessary test data:
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+
+        CrtOperacaoEntity op = new CrtOperacaoEntity();
+        op.setId(25384);
+        op.setDataHora(Timestamp.valueOf("2014-12-16 15:24:54.0"));
+        em.persist(op);
+
+        CrtOperacaoEntity op2 = new CrtOperacaoEntity();
+        op2.setId(23409);
+        op2.setDataHora(Timestamp.valueOf("2014-10-27 16:12:53.0"));
+        em.persist(op2);
+
+        CrtRequisicaoChequePersEntity reqCheq =
+            new CrtRequisicaoChequePersEntity();
+        reqCheq.setId(500006164);
+        reqCheq.setCrtOperacaoByOperacaoRecepcaoServCent(op);
+        reqCheq.setCrtOperacaoByOperacaoRequisicao(op2);
+        em.persist(reqCheq);
+
+        em.getTransaction().commit();
+        em.close();
+    }
+
+    /*
+     * Prior to OPENJPA-2651, this test would result in the following exception:
+     * 
+     * PersistenceException: Column '0' not found.
+     *   FailedObject: 
+     *   org.apache.openjpa.persistence.query.sqlresultmapping.CrtOperacaoEntity-500006164 [java.lang.String]
+     *        at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4998)
+     *   .....
+     *   Caused by: java.sql.SQLException: Column '0' not found.         
+     */
+    public void testMappingNoException() {
+
+        String sql = "SELECT t0.ID, t2.DATA_HORA as opRecepcaoServCentraisDataHora, t2.ID as opRecepcaoServCentraisId"
+                + " FROM CRT_REQUISICAO_CHEQUE_PERS t0, CRT_OPERACAO t2 WHERE t0.ID = 500006164 and t2.ID = 25384";
+
+        EntityManager em = emf.createEntityManager();
+
+        Query query = em.createNativeQuery(sql, "MyResultMapping");
+        List<CrtRequisicaoChequePersEntity> res = query.getResultList();
+
+        assertEquals(res.size(), 1);
+        assertEquals(500006164, res.get(0).getId());
+        assertEquals(25384, res.get(0).getCrtOperacaoByOperacaoRecepcaoServCent().getId());        
+        assertEquals(Timestamp.valueOf("2014-12-16 15:24:54.0"), 
+            res.get(0).getCrtOperacaoByOperacaoRecepcaoServCent().getDataHora());
+
+        em.close();
+    }
+
+    /*
+     * Prior to OPENJPA-2651, this test would result in the wrong id provided in the 
+     * CrtOperacaoEntity.  Specifically, the ID in CrtOperacaoEntity would contain
+     * '500006164', which is the ID for the CrtRequisicaoEntity.
+     */
+    public void testMappingCorrectID() {
+
+        String sql =
+            "SELECT t0.ID, t1.ID as opRecepcaoServCentraisId, t1.DATA_HORA as opRecepcaoServCentraisDataHora, "
+                + "t2.ID, t2.DATA_HORA, t3.ID, t4.ID, t4.OPERACAO_RECEPCAO_SERV_CENT, "
+                + "t4.OPERACAO_REQUISICAO FROM CRT_REQUISICAO_CHEQUE_PERS t0 LEFT OUTER JOIN "
+                + "CRT_OPERACAO t1 ON t0.OPERACAO_RECEPCAO_SERV_CENT = t1.ID LEFT OUTER JOIN "
+                + "CRT_OPERACAO t2 ON t0.OPERACAO_REQUISICAO = t2.ID "
+                + "LEFT OUTER JOIN CRT_REQUISICAO t3 "
+                + "ON t0.ID = t3.ID INNER JOIN CRT_REQUISICAO t5 "
+                + "ON t0.ID = t5.ID LEFT OUTER JOIN "
+                + "CRT_REQUISICAO_CHEQUE_PERS t4 "
+                + "ON t3.ID = t4.ID WHERE t0.ID = 500006164";
+
+        EntityManager em = emf.createEntityManager();
+
+        Query query = em.createNativeQuery(sql, "MyResultMapping");
+        List<CrtRequisicaoChequePersEntity> res = query.getResultList();
+        
+        assertEquals(res.size(), 1);
+        assertEquals(500006164, res.get(0).getId());
+        assertEquals(25384, res.get(0).getCrtOperacaoByOperacaoRecepcaoServCent().getId());
+        assertEquals(Timestamp.valueOf("2014-12-16 15:24:54.0"), 
+            res.get(0).getCrtOperacaoByOperacaoRecepcaoServCent().getDataHora());
+
+        em.close();
+    }
+}

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: openjpa/branches/2.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/query/sqlresultmapping/TestSQLResultSetMapping.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain