openjpa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dwo...@apache.org
Subject svn commit: r805573 - in /openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed: EntityA_Embed_Complex.java TestEmbeddable.java
Date Tue, 18 Aug 2009 20:45:21 GMT
Author: dwoods
Date: Tue Aug 18 20:45:21 2009
New Revision: 805573

URL: http://svn.apache.org/viewvc?rev=805573&view=rev
Log:
additional test for embeddable, elementcollection and lob

Added:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Complex.java
  (with props)
Modified:
    openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java

Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Complex.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Complex.java?rev=805573&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Complex.java
(added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Complex.java
Tue Aug 18 20:45:21 2009
@@ -0,0 +1,196 @@
+/*
+ * 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.embed;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.AttributeOverride;
+import javax.persistence.AttributeOverrides;
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+import javax.persistence.Transient;
+
+import javax.persistence.ElementCollection;
+import javax.persistence.CollectionTable;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="TBL3C")
+public class EntityA_Embed_Complex implements Serializable {
+    @Id
+    Integer id;
+
+    @Column(length=30)
+    String name;
+    
+    @Basic(fetch=FetchType.LAZY)
+    int age;
+
+    @ElementCollection(fetch=FetchType.EAGER) 
+    @CollectionTable(name="NickNames_Tbl")
+    @Column(name="nicknames1", length=20)
+    protected Set<String> nickNames = new HashSet<String>();
+
+    @ElementCollection
+    @Enumerated(EnumType.ORDINAL)
+    protected List<CreditRating> cr = new ArrayList<CreditRating>();
+    
+    @ElementCollection
+    @Temporal(TemporalType.DATE)
+    protected List<Timestamp> ts = new ArrayList<Timestamp>();
+
+    @ElementCollection
+    @Lob
+    protected List<String> lobs = new ArrayList<String>();
+
+    protected Embed_Embed embed;
+    
+    @ElementCollection
+    protected List<Embed_Embed> embeds = new ArrayList<Embed_Embed>();
+
+    @ElementCollection(fetch=FetchType.EAGER)
+    @CollectionTable(name="EMBED1ToOneS2") // use default join column name
+    @AttributeOverrides({
+        @AttributeOverride(name="name1", column=@Column(name="EMB_NAME1")),
+        @AttributeOverride(name="name2", column=@Column(name="EMB_NAME2")),
+        @AttributeOverride(name="name3", column=@Column(name="EMB_NAME3"))
+    })
+    protected Set<Embed_ToOne> embed1s = new HashSet<Embed_ToOne>();
+
+    private transient Integer transientJavaValue;
+
+    @Transient
+    private Integer transientValue;
+
+    
+    /*
+     * Getters/Setters
+     */
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Set<String> getNickNames() {
+        return nickNames;
+    }
+    
+    public void addNickName(String nickName) {
+        nickNames.add(nickName);
+    }
+
+    public List<CreditRating> getCreditRating() {
+        return cr;
+    }
+    
+    public void addCreditRating(CreditRating c) {
+        cr.add(c);
+    }
+    
+    public List<Timestamp> getTimestamps() {
+        return ts;
+    }
+    
+    public void addTimestamp(Timestamp t) {
+        ts.add(t);
+    }
+    
+    public List<String> getLobs() {
+        return lobs;
+    }
+    
+    public void addLob(String lob) {
+        lobs.add(lob);
+    }
+
+    public enum CreditRating { POOR, GOOD, EXCELLENT };
+    
+    public Embed_Embed getEmbed() {
+        return embed;
+    }
+    
+    public void setEmbed(Embed_Embed embed) {
+        this.embed = embed;
+    }
+
+    public List<Embed_Embed> getEmbeds() {
+        return embeds;
+    }
+    
+    public void addEmbed(Embed_Embed embed) {
+        embeds.add(embed);
+    }
+
+    public Set<Embed_ToOne> getEmbed1ToOnes() {
+        return embed1s;
+    }
+    
+    public void addEmbed1ToOnes(Embed_ToOne embed1) {
+        embed1s.add(embed1);
+    }
+
+    public Integer getTransientJavaValue() {
+        return this.transientJavaValue;
+    }
+
+    public void setTransientJavaValue(Integer transientJavaValue) {
+        this.transientJavaValue = transientJavaValue;
+    }
+
+    public Integer getTransientValue() {
+        return this.transientValue;
+    }
+
+    public void setTransientValue(Integer transientValue) {
+        this.transientValue = transientValue;
+    }
+}

Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/EntityA_Embed_Complex.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java?rev=805573&r1=805572&r2=805573&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
(original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbeddable.java
Tue Aug 18 20:45:21 2009
@@ -19,8 +19,10 @@
 package org.apache.openjpa.persistence.embed;
 
 import java.sql.Timestamp;
+import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -32,11 +34,13 @@
 import javax.persistence.Query;
 
 
+import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.persistence.ArgumentException;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
 public class TestEmbeddable extends SingleEMFTestCase {
-   
+    private static final Calendar cal = new GregorianCalendar();
+    private static final Integer timeHash = new Integer(cal.hashCode());
     public int numEmbeddables = 1;
     public int numBasicTypes = 1;
     public int numProgramManagers = 2;
@@ -86,7 +90,8 @@
             VicePresident.class, EntityA_Embed_MappedToOne.class,
             Embed_MappedToOne.class, Embed_MappedToOneCascadeDelete.class, 
             EntityA_Embed_MappedToOneCascadeDelete.class, EntityB2.class, 
-            Book.class, Listing.class, Seller.class, DROP_TABLES);
+            Book.class, Listing.class, Seller.class,
+            EntityA_Embed_Complex.class, CLEAR_TABLES);
     }
     
     public void testEntityA_Coll_String() {
@@ -185,6 +190,7 @@
     public void testEmbeddableContainingRelationWithGeneratedKey() {
         createEmbeddableContainingRelationWithGeneratedKey();
     }
+
     /*
      * Create EntityA_Coll_String
      */
@@ -2524,7 +2530,8 @@
         }
         tran.commit();
         em.close();
-    }        
+    }
+    
     public void createEmbeddableContainingRelationWithGeneratedKey() {
         EntityManager em = emf.createEntityManager();
         EntityTransaction tran = em.getTransaction();
@@ -2548,6 +2555,236 @@
             assertNotNull(seller);
             assertTrue(seller.getId() != 0);
         }
-        
+    }
+
+    /*
+     * EntityA_Embed_Complex routines
+     */
+    public void testEntityA_Embed_Complex() {
+        getLog().trace("testEntityA_Embed_Complex() - entered");
+        createEntityA_Embed_Complex(null);
+        queryEntityA_Embed_Complex(null);
+        findEntityA_Embed_Complex(null);
+    }
+
+    public void testEntityA_Embed_Complex2() {
+        getLog().trace("testEntityA_Embed_Complex2() - entered");
+        EntityManager em = emf.createEntityManager();
+        em.clear();
+        createEntityA_Embed_Complex(em);
+        em.clear();
+        //queryEntityA_Embed_Complex(em);
+        //em.clear();
+        findEntityA_Embed_Complex(em);
+        em.clear();
+        updateEntityA_Embed_Complex(em);
+        em.clear();
+        findEntityA_Embed_Complex(em);
+        em.clear();
+        removeEntityA_Embed_Complex(em);
+        em.close();
+    }
+
+    public void createEntityA_Embed_Complex(EntityManager em) {
+        Boolean emClose = false;
+        if (em == null) {
+            em = emf.createEntityManager();
+            emClose = true;
+        }
+        em.getTransaction().begin();
+        createEntityA_Embed_Complex(em, ID);
+        //em.getTransaction().begin();
+        em.flush();
+        em.getTransaction().commit();
+        if (emClose) {
+            em.close();
+        }
+    }
+
+    public void createEntityA_Embed_Complex(EntityManager em, int id) {
+        getLog().trace("createEntityA_Embed_Complex() - entered");
+        EntityA_Embed_Complex a = new EntityA_Embed_Complex();
+        a.setId(id);
+        a.setName("a" + id);
+        a.setAge(id);
+        for (int i = 0; i < numBasicTypes; i++) {
+            a.addNickName("nickName_" + id + i);
+        }
+        a.addCreditRating(EntityA_Embed_Complex.CreditRating.POOR);
+        a.addTimestamp(new Timestamp(cal.getTimeInMillis()));
+        a.addLob("lob_0");
+        a.setEmbed(createEmbed_Embed(em, numEmbeddables, 0));
+        for (int i = 0; i < numEmbeddables; i++) {
+            Embed_Embed embed = createEmbed_Embed(em, id, i);
+            a.addEmbed(embed);
+        }
+        for (int i = 0; i < numEmbeddables; i++) {
+            Embed_ToOne embed = createEmbed_ToOne(em, i+id);
+            a.addEmbed1ToOnes(embed);
+        }
+        a.setTransientJavaValue(timeHash);
+        a.setTransientValue(timeHash);
+        em.persist(a);
+    }
+
+    public void checkEntityA_Embed_Complex(EntityA_Embed_Complex a) {
+        getLog().trace("checkEntityA_Embed_Complex() - entered");
+        int id = a.getId();
+        String name = a.getName();
+        int age = a.getAge();
+        assertEquals(ID, id);
+        assertEquals("a" + id ,name);
+        assertEquals(ID, age);
+        Set<String> nickNames = a.getNickNames();
+        for (String nickName : nickNames) {
+            assertEquals("nickName_" + id + "0", nickName);
+        }
+        List<EntityA_Embed_Complex.CreditRating> cr = a.getCreditRating();
+        for (EntityA_Embed_Complex.CreditRating c : cr) {
+            assertEquals("POOR", c.toString());
+        }
+        List<Timestamp> tstamps = a.getTimestamps();
+        for (Timestamp ts : tstamps) {
+            assertNotEquals(0, ts.getTime());
+        }
+        List<String> lobs = a.getLobs();
+        int i = 0;
+        for (String lob : lobs) {
+            assertEquals("lob_" + i++, lob);
+        }
+        Embed_Embed embedded = a.getEmbed();
+        checkEmbed_Embed(embedded);
+        List<Embed_Embed> embeds = a.getEmbeds();
+        for (Embed_Embed embed : embeds) {
+            checkEmbed_Embed(embed);
+        }
+        Set<Embed_ToOne> embedOnes = a.getEmbed1ToOnes();
+        for (Embed_ToOne embed : embedOnes) {
+            checkEmbed_ToOne(embed);
+        }
+        assertNotEquals(a.getTransientJavaValue(), timeHash);
+        assertNotEquals(a.getTransientValue(), timeHash);
+    }
+
+    public void findEntityA_Embed_Complex(EntityManager em) {
+        Boolean emClose = false;
+        getLog().trace("findEntityA_Embed_Complex() - entered");
+        if (em == null) {
+            em = emf.createEntityManager();
+            emClose = true;
+        }
+        EntityA_Embed_Complex a = em.find(EntityA_Embed_Complex.class, ID);
+        checkEntityA_Embed_Complex(a);
+        if (emClose) {
+            em.close();
+        }
+    }
+
+    public void updateEntityA_Embed_Complex(EntityManager em) {
+        Boolean emClose = false;
+        getLog().trace("updateEntityA_Embed_Complex() - entered");
+        if (em == null) {
+            em = emf.createEntityManager();
+            emClose = true;
+        }
+        em.getTransaction().begin();
+        EntityA_Embed_Complex a = em.find(EntityA_Embed_Complex.class, ID);
+        checkEntityA_Embed_Complex(a);
+        for (int i = 1; i < numEmbeddables; i++) {
+            a.addLob("lob_" + i);
+        }
+        a.setTransientJavaValue(2009);
+        a.setTransientValue(2009);
+        em.persist(a);
+        em.flush();
+        em.getTransaction().commit();
+        if (emClose) {
+            em.close();
+        }
+    }
+
+    public void removeEntityA_Embed_Complex(EntityManager em) {
+        Boolean emClose = false;
+        getLog().trace("removeEntityA_Embed_Complex() - entered");
+        if (em == null) {
+            em = emf.createEntityManager();
+            emClose = true;
+        }
+        em.getTransaction().begin();
+        EntityA_Embed_Complex a = em.find(EntityA_Embed_Complex.class, ID);
+        checkEntityA_Embed_Complex(a);
+        em.remove(a);
+        em.flush();
+        em.getTransaction().commit();
+        em.clear();
+        a = em.find(EntityA_Embed_Complex.class, ID);
+        assertNull("Entity should no longer exist", a);
+        if (emClose) {
+            em.close();
+        }
+    }
+
+    public void queryEntityA_Embed_Complex(EntityManager em) {
+        Boolean emClose = false;
+        getLog().trace("queryEntityA_Embed_Complex() - entered");
+        if (em == null) {
+            em = emf.createEntityManager();
+            emClose = true;
+        }
+        String[] query = {
+            "select e from " +
+                " EntityA_Embed_Complex a " +
+                " , in (a.nickNames) e order by a.id",
+            "select e from " +
+                " EntityA_Embed_Complex a " +
+                " , in (a.nickNames) e order by a.id",
+            "select e from " +
+                " EntityA_Embed_Complex a " +
+                " , in (a.nickNames) e order by e",
+            "select a from " +
+                " EntityA_Embed_Complex a " +
+                " WHERE a.nickNames IS EMPTY order by a",
+            "select a from " +
+                " EntityA_Embed_Complex a " +
+                " WHERE exists (select n from EntityA_Embed_Complex a, " +
+                " in (a.nickNames) n where n like '%1') " +
+                " order by a",
+        };
+        List rs = null;
+        for (int i = 0; i < query.length; i++) {
+            rs = em.createQuery(query[i]).getResultList();
+            switch (i) {
+            case 0:
+            case 1:
+            case 2:
+                assertTrue(rs.size() > 0);
+                Object obj = rs.get(0);
+                assertTrue(obj instanceof String);
+                break;
+            case 3:
+            case 4:
+                assertTrue(rs.size() == 0);
+            }
+            em.clear();
+        }
+        em.getTransaction().begin();
+        Query q = em.createQuery("select a from EntityA_Embed_Complex a");
+        List<EntityA_Embed_Complex> as = q.getResultList();
+        for (EntityA_Embed_Complex a : as) {
+            checkEntityA_Embed_Complex(a);
+        }
+        em.getTransaction().commit();
+        if (emClose) {
+            em.close();
+        }
+    }
+    
+    /**
+     * Internal convenience method for getting the OpenJPA logger
+     * 
+     * @return
+     */
+    private Log getLog() {
+        return emf.getConfiguration().getLog("Tests");
     }
 }



Mime
View raw message