openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dick <michael.d.d...@gmail.com>
Subject Re: svn commit: r800847 - OPENJPA-1222
Date Tue, 04 Aug 2009 22:07:58 GMT
Doesn't look like it's a 32 vs 64 bit issue. Running the tests individually
(what I did with the 32 bit version) passes, running the entire bucket shows
problems.

Changing forkMode to always *should* resolve the problem but the tests will
take much longer. Still looking into it, but any other ideas are welcome.

-mike

On Tue, Aug 4, 2009 at 2:16 PM, Michael Dick <michael.d.dick@gmail.com>wrote:

> Might be specific to the 64 bit version, the criteria tests work for me
> with Sun 32 bit JDK6 (java full version "1.6.0_07-b06"). That JDK is a bit
> old though, I'll try upgrading.
>
> -mike
>
>
> On Tue, Aug 4, 2009 at 2:10 PM, Donald Woods <dwoods@apache.org> wrote:
>
>> This seems to have broken builds with 64bit Sun 6 JDK on Linux (but not
>> MacOSX), as now there are 239 criteria test errors/failures....
>>
>>
>> -Donald
>>
>>
>> mikedd@apache.org wrote:
>>
>>> Author: mikedd
>>> Date: Tue Aug  4 15:36:18 2009
>>> New Revision: 800847
>>>
>>> URL: http://svn.apache.org/viewvc?rev=800847&view=rev
>>> Log:
>>> OPENJPA-1222: Enabling and refactoring Criteria testcases. The Criteria
>>> testcases use a static EMF which requires the entity model to be known up
>>> front - refactoring creates a separate EMF for the embeddable and joined
>>> models.
>>>
>>> Added:
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/AbstractCriteriaTestCase.java
>>>   (with props)
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/EmbeddableDomainTestCase.java
>>>   (with props)
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/JoinDomainTestCase.java
>>>   (with props)
>>> Modified:
>>>    openjpa/trunk/openjpa-persistence-jdbc/pom.xml
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestEmbeddableCriteria.java
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJoinCondition.java
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
>>>
>>>  openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item1.java
>>>
>>> Modified: openjpa/trunk/openjpa-persistence-jdbc/pom.xml
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/pom.xml?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> --- openjpa/trunk/openjpa-persistence-jdbc/pom.xml (original)
>>> +++ openjpa/trunk/openjpa-persistence-jdbc/pom.xml Tue Aug  4 15:36:18
>>> 2009
>>> @@ -810,10 +810,9 @@
>>>                         <!--
>>> <exclude>org/apache/openjpa/persistence/lockmgr/*.java</exclude> -->
>>>
>>>                         <!--
>>> ================================================================== -->
>>> -                                               <!--  Critera & MetaModel
>>> tests are *temporarily* excluded to wait for  -->
>>> +                                               <!--  MetaModel tests are
>>> *temporarily* excluded to wait for            -->
>>>                                                <!--  spec to stabilize on
>>> Result Processing API                        -->
>>>                                                <!--
>>> ================================================================== --> -
>>>
>>>  <exclude>org/apache/openjpa/persistence/criteria/*.java</exclude>
>>>
>>> <exclude>org/apache/openjpa/persistence/meta/*.java</exclude>
>>>                                                 <!-- Exclude subclassing
>>> tests   -->
>>>
>>> Added:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/AbstractCriteriaTestCase.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/AbstractCriteriaTestCase.java?rev=800847&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/AbstractCriteriaTestCase.java
>>> (added)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/AbstractCriteriaTestCase.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -0,0 +1,386 @@
>>> +/*
>>> + * 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.criteria;
>>> +
>>> +import java.io.PrintWriter;
>>> +import java.io.StringWriter;
>>> +import java.lang.reflect.Method;
>>> +import java.util.ArrayList;
>>> +import java.util.HashMap;
>>> +import java.util.List;
>>> +import java.util.Map;
>>> +
>>> +import javax.persistence.EntityManager;
>>> +import javax.persistence.Persistence;
>>> +import javax.persistence.Query;
>>> +import javax.persistence.criteria.CriteriaQuery;
>>> +
>>> +import junit.framework.TestCase;
>>> +
>>> +import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
>>> +import org.apache.openjpa.jdbc.sql.DBDictionary;
>>> +import org.apache.openjpa.jdbc.sql.DerbyDictionary;
>>> +import org.apache.openjpa.lib.jdbc.AbstractJDBCListener;
>>> +import org.apache.openjpa.lib.jdbc.JDBCEvent;
>>> +import org.apache.openjpa.lib.jdbc.JDBCListener;
>>> +import org.apache.openjpa.lib.jdbc.ReportingSQLException;
>>> +import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
>>> +import org.apache.openjpa.persistence.test.AllowFailure;
>>> +
>>> +public abstract class AbstractCriteriaTestCase extends TestCase {
>>> +
>>> +    protected abstract SQLAuditor getAuditor();
>>> +
>>> +    protected abstract OpenJPAEntityManagerFactorySPI
>>> getEntityManagerFactory();
>>> +    +    protected abstract EntityManager getEntityManager();
>>> +
>>> +    /**
>>> +     * Create an entity manager factory for persistence unit
>>> <code>pu</code>. Put {@link #CLEAR_TABLES} in this list to
>>> +     * tell the test framework to delete all table contents before
>>> running the tests.
>>> +     * +     * @param props
>>> +     *            list of persistent types used in testing and/or
>>> configuration values in the form
>>> +     *            key,value,key,value...
>>> +     */
>>> +    protected OpenJPAEntityManagerFactorySPI createNamedEMF(Class<?>...
>>> types) {
>>> +        Map<Object, Object> map = new HashMap<Object, Object>();
>>> +        map.put("openjpa.jdbc.SynchronizeMappings",
>>> "buildSchema(ForeignKeys=true," + "SchemaAction='add')");
>>> +        map.put("openjpa.jdbc.QuerySQLCache", "false");
>>> +        map.put("openjpa.DynamicEnhancementAgent", "false");
>>> +        map.put("openjpa.RuntimeUnenhancedClasses", "unsupported");
>>> +        map.put("openjpa.Compatibility", "QuotedNumbersInQueries=true");
>>> +        map.put("openjpa.jdbc.JDBCListeners", new JDBCListener[] {
>>> getAuditor() });
>>> +
>>> +        StringBuffer buf = new StringBuffer();
>>> +        for (Class<?> c : types) {
>>> +            if (buf.length() > 0)
>>> +                buf.append(";");
>>> +            buf.append(c.getName());
>>> +        }
>>> +
>>> +        map.put("openjpa.MetaDataFactory", "jpa(Types=" + buf.toString()
>>> + ")");
>>> +
>>> +        Map<Object, Object> config = new HashMap<Object,
>>> Object>(System.getProperties());
>>> +        config.putAll(map);
>>> +        return (OpenJPAEntityManagerFactorySPI)
>>> Persistence.createEntityManagerFactory("test", config);
>>> +    }
>>> +
>>> +    void setDictionary() {
>>> +        JDBCConfiguration conf = (JDBCConfiguration)
>>> getEntityManagerFactory().getConfiguration();
>>> +        DBDictionary dict = conf.getDBDictionaryInstance();
>>> +        dict.requiresCastForComparisons = false;
>>> +        dict.requiresCastForMathFunctions = false;
>>> +    }
>>> +
>>> +    /**
>>> +     * Executes the given CriteriaQuery and JPQL string and compare
>>> their respective SQLs for equality.
>>> +     */
>>> +    void assertEquivalence(CriteriaQuery<?> c, String jpql) {
>>> +        assertEquivalence(c, jpql, null);
>>> +    }
>>> +
>>> +    /**
>>> +     * Executes the given CriteriaQuery and JPQL string and compare
>>> their respective SQLs for equality. Sets the
>>> +     * supplied parameters, if any.
>>> +     */
>>> +    void assertEquivalence(CriteriaQuery<?> c, String jpql, String[]
>>> paramNames, Object[] params) {
>>> +        Query cQ = getEntityManager().createQuery(c);
>>> +        Query jQ = getEntityManager().createQuery(jpql);
>>> +        setParameters(cQ, paramNames, params);
>>> +        setParameters(jQ, paramNames, params);
>>> +
>>> +        executeAndCompareSQL(jpql, cQ, jQ);
>>> +    }
>>> +
>>> +    /**
>>> +     * Executes the given CriteriaQuery and JPQL string and compare
>>> their respective SQLs for equality.
>>> +     */
>>> +    void assertEquivalence(CriteriaQuery<?> c, String jpql, Object[]
>>> params) {
>>> +        +        Query cQ = getEntityManager().createQuery(c);
>>> +        Query jQ = getEntityManager().createQuery(jpql);
>>> +        setParameters(cQ, params);
>>> +        setParameters(jQ, params);
>>> +
>>> +        executeAndCompareSQL(jpql, cQ, jQ);
>>> +    }
>>> +
>>> +    /**
>>> +     * Execute the two given queries. The first query originated from a
>>> JPQL string must be well-formed. The second
>>> +     * query originated from a Criteria is being tested.
>>> +     * +     * @param sqls
>>> +     *            The target SQL for the queries will be filled-in the
>>> given array.
>>> +     * @return true if both queries execute successfully.
>>> +     */
>>> +    void executeAndCompareSQL(String jpql, Query cQ, Query jQ) {
>>> +        List<String> jSQL = null;
>>> +        List<String> cSQL = null;
>>> +        try {
>>> +            jSQL = executeQueryAndCollectSQL(jQ);
>>> +        } catch (Exception e) {
>>> +            StringWriter w = new StringWriter();
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +            fail("JPQL " + jpql + " failed to execute\r\n" + w);
>>> +        }
>>> +        getEntityManager().clear();
>>> +        try {
>>> +            cSQL = executeQueryAndCollectSQL(cQ);
>>> +        } catch (Exception e) {
>>> +            StringWriter w = new StringWriter();
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +            fail("CriteriaQuery corresponding to " + jpql + " failed to
>>> execute\r\n" + w);
>>> +        }
>>> +
>>> +        printSQL("Target SQL for JPQL", jSQL);
>>> +        printSQL("Target SQL for CriteriaQuery", cSQL);
>>> +        if (jSQL.size() != cSQL.size()) {
>>> +            printSQL("Target SQL for JPQL", jSQL);
>>> +            printSQL("Target SQL for CriteriaQuery", cSQL);
>>> +            assertEquals("No. of SQL generated for JPQL and
>>> CriteriaQuery for " + jpql + " is different", jSQL.size(),
>>> +                cSQL.size());
>>> +        }
>>> +
>>> +        for (int i = 0; i < jSQL.size(); i++) {
>>> +            if (!jSQL.get(i).equals(cSQL.get(i))) {
>>> +                printSQL("Target SQL for JPQL", jSQL);
>>> +                printSQL("Target SQL for CriteriaQuery", cSQL);
>>> +                assertEquals(i + "-th SQL for JPQL and CriteriaQuery for
>>> " + jpql + " is different", jSQL.get(i), cSQL
>>> +                    .get(i));
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    void executeAndCompareSQL(String jpql, String expectedSQL) {
>>> +        JDBCConfiguration conf = (JDBCConfiguration)
>>> getEntityManagerFactory().getConfiguration();
>>> +        DBDictionary dict = conf.getDBDictionaryInstance();
>>> +
>>> +        Query jQ = getEntityManager().createQuery(jpql);
>>> +
>>> +        List<String> jSQL = null;
>>> +        try {
>>> +            jSQL = executeQueryAndCollectSQL(jQ);
>>> +        } catch (Exception e) {
>>> +            StringWriter w = new StringWriter();
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +            fail("JPQL " + jpql + " failed to execute\r\n" + w);
>>> +        }
>>> +
>>> +        printSQL("Target SQL for JPQL", jSQL);
>>> +
>>> +        if (!(dict instanceof DerbyDictionary))
>>> +            return;
>>> +
>>> +        for (int i = 0; i < jSQL.size(); i++) {
>>> +            if (!jSQL.get(i).equals(expectedSQL)) {
>>> +                printSQL("SQL for JPQL", jSQL.get(i));
>>> +                printSQL("Expected SQL", expectedSQL);
>>> +                assertEquals(i + "-th Expected SQL and SQL for JPQL: " +
>>> jpql + " are different", expectedSQL, jSQL
>>> +                    .get(i));
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    void executeAndCompareSQL(Query jQ, String expectedSQL) {
>>> +        JDBCConfiguration conf = (JDBCConfiguration)
>>> getEntityManagerFactory().getConfiguration();
>>> +        DBDictionary dict = conf.getDBDictionaryInstance();
>>> +
>>> +        List<String> jSQL = null;
>>> +        try {
>>> +            jSQL = executeQueryAndCollectSQL(jQ);
>>> +        } catch (Exception e) {
>>> +            StringWriter w = new StringWriter();
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +        }
>>> +
>>> +        if (!(dict instanceof DerbyDictionary))
>>> +            return;
>>> +
>>> +        printSQL("Expected SQL", expectedSQL);
>>> +        String jSql = jSQL.get(0).trim();
>>> +        if (jSql.indexOf("optimize for 1 row") != -1)
>>> +            jSql = jSql.substring(0, jSql.indexOf("optimize for 1
>>> row")).trim();
>>> +
>>> +        if (!jSql.equals(expectedSQL)) {
>>> +            printSQL("SQL for JPQL", jSql);
>>> +            assertEquals(expectedSQL, jSql);
>>> +        }
>>> +    }
>>> +
>>> +    void executeExpectFail(CriteriaQuery<?> c, String jpql) {
>>> +        List<String> cSQL = null;
>>> +        StringWriter w = new StringWriter();
>>> +        try {
>>> +            Query cQ = getEntityManager().createQuery(c);
>>> +            cSQL = executeQueryAndCollectSQL(cQ);
>>> +            fail("CriteriaQuery corresponding to " + jpql + " is
>>> expected to fail\r\n" + w);
>>> +        } catch (Exception e) {
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +        }
>>> +    }
>>> +
>>> +    void executeExpectFail(CriteriaQuery<?> c, String jpql, String[]
>>> paramNames, Object[] params) {
>>> +        List<String> cSQL = null;
>>> +        StringWriter w = new StringWriter();
>>> +        try {
>>> +            Query cQ = getEntityManager().createQuery(c);
>>> +            for (int i = 0; i < params.length; i++)
>>> +                cQ.setParameter(paramNames[i], params[i]);
>>> +            cSQL = executeQueryAndCollectSQL(cQ);
>>> +            fail("CriteriaQuery corresponding to " + jpql + " is
>>> expected to fail\r\n" + w);
>>> +        } catch (Exception e) {
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +        }
>>> +    }
>>> +
>>> +    void executeExpectFail(String jpql) {
>>> +        List<String> jSQL = null;
>>> +        StringWriter w = new StringWriter();
>>> +        try {
>>> +            Query jQ = getEntityManager().createQuery(jpql);
>>> +            jSQL = executeQueryAndCollectSQL(jQ);
>>> +            fail("JPQL " + jpql + " is expected to Failed to
>>> execute\r\n" + w);
>>> +        } catch (Exception e) {
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +        }
>>> +    }
>>> +
>>> +    void executeExpectFail(String jpql, String[] paramNames, Object[]
>>> params) {
>>> +        List<String> jSQL = null;
>>> +        StringWriter w = new StringWriter();
>>> +        try {
>>> +            Query jQ = getEntityManager().createQuery(jpql);
>>> +            for (int i = 0; i < params.length; i++)
>>> +                jQ.setParameter(paramNames[i], params[i]);
>>> +            jSQL = executeQueryAndCollectSQL(jQ);
>>> +            fail("JPQL " + jpql + " is expected to Failed to
>>> execute\r\n" + w);
>>> +        } catch (Exception e) {
>>> +            e.printStackTrace(new PrintWriter(w));
>>> +        }
>>> +    }
>>> +
>>> +    void printSQL(String header, String sql) {
>>> +        System.err.println(header);
>>> +        System.err.println(sql);
>>> +    }
>>> +
>>> +    void printSQL(String header, List<String> sqls) {
>>> +        System.err.println(header);
>>> +        for (int i = 0; sqls != null && i < sqls.size(); i++) {
>>> +            System.err.println(i + ":" + sqls.get(i));
>>> +        }
>>> +    }
>>> +
>>> +    void setParameters(Query q, String[] paramNames, Object[] params) {
>>> +        for (int i = 0; paramNames != null && i < paramNames.length;
>>> i++)
>>> +            q.setParameter(paramNames[i], params[i]);
>>> +    }
>>> +
>>> +    void setParameters(Query q, Object[] params) {
>>> +        for (int i = 0; params != null && i < params.length; i++)
>>> +            q.setParameter(i + 1, params[i]);
>>> +    }
>>> +
>>> +    /**
>>> +     * Execute the given query and return the generated SQL. If the
>>> query execution fail because the generated SQL is
>>> +     * ill-formed, then raised exception should carry the ill-formed SQL
>>> for diagnosis.
>>> +     */
>>> +    List<String> executeQueryAndCollectSQL(Query q) {
>>> +        getAuditor().clear();
>>> +        try {
>>> +            List<?> result = q.getResultList();
>>> +        } catch (Exception e) {
>>> +            throw new RuntimeException(extractSQL(e), e);
>>> +        }
>>> +        assertFalse(getAuditor().getSQLs().isEmpty());
>>> +        return getAuditor().getSQLs();
>>> +    }
>>> +
>>> +    void executeAndCompareSQL(CriteriaQuery<?> q, String expectedSQL) {
>>> +        executeAndCompareSQL(getEntityManager().createQuery(q),
>>> expectedSQL);
>>> +    }
>>> +
>>> +    String extractSQL(Exception e) {
>>> +        Throwable t = e.getCause();
>>> +        if (t instanceof ReportingSQLException)
>>> +            return ((ReportingSQLException) t).getSQL();
>>> +        return "Can not extract SQL from exception " + e;
>>> +    }
>>> +
>>> +    @Override
>>> +    public void runBare() throws Throwable {
>>> +        try {
>>> +            super.runBare();
>>> +        } catch (Throwable t) {
>>> +            AllowFailure allowFailure = getAllowFailure();
>>> +            if (allowFailure != null && allowFailure.value()) {
>>> +                System.err.println("*** FAILED (but ignored): " + this);
>>> +                System.err.println("***              Reason : " +
>>> allowFailure.message());
>>> +                System.err.println("Stacktrace of failure");
>>> +                t.printStackTrace();
>>> +            } else {
>>> +                throw t;
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    /**
>>> +     * Affirms if the test case or the test method is annotated with
>>> +     * +     * @AllowFailure. Method level annotation has higher
>>> precedence than Class level annotation.
>>> +     * +     *                Set -DIgnoreAllowFailure=true to ignore
>>> this directive altogether.
>>> +     */
>>> +    protected AllowFailure getAllowFailure() {
>>> +        if (Boolean.getBoolean("IgnoreAllowFailure"))
>>> +            return null;
>>> +        try {
>>> +            Method runMethod = getClass().getMethod(getName(), (Class[])
>>> null);
>>> +            AllowFailure anno =
>>> runMethod.getAnnotation(AllowFailure.class);
>>> +            if (anno != null)
>>> +                return anno;
>>> +        } catch (SecurityException e) {
>>> +            // ignore
>>> +        } catch (NoSuchMethodException e) {
>>> +            // ignore
>>> +        }
>>> +        return getClass().getAnnotation(AllowFailure.class);
>>> +    }
>>> +
>>> +    public class SQLAuditor extends AbstractJDBCListener {
>>> +        private List<String> sqls = new ArrayList<String>();
>>> +
>>> +        @Override
>>> +        public void beforeExecuteStatement(JDBCEvent event) {
>>> +            if (event.getSQL() != null && sqls != null) {
>>> +                System.err.println("Adding " + event.getSQL());
>>> +                sqls.add(event.getSQL());
>>> +            }
>>> +        }
>>> +
>>> +        void clear() {
>>> +            sqls.clear();
>>> +        }
>>> +
>>> +        List<String> getSQLs() {
>>> +            return new ArrayList<String>(sqls);
>>> +        }
>>> +    }
>>> +}
>>>
>>> Propchange:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/AbstractCriteriaTestCase.java
>>>
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/CriteriaTest.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -18,442 +18,76 @@
>>>  */
>>>  package org.apache.openjpa.persistence.criteria;
>>>  -import java.io.PrintWriter;
>>> -import java.io.StringWriter;
>>> -import java.lang.reflect.Method;
>>> -import java.util.ArrayList;
>>> -import java.util.Collections;
>>> -import java.util.HashMap;
>>> -import java.util.List;
>>> -import java.util.Map;
>>> -
>>>  import javax.persistence.EntityManager;
>>> -import javax.persistence.Persistence;
>>> -import javax.persistence.PersistenceException;
>>> -import javax.persistence.Query;
>>> -import javax.persistence.criteria.CriteriaQuery;
>>> -import javax.persistence.criteria.QueryBuilder;
>>> -
>>> -import junit.framework.TestCase;
>>> -
>>> -import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
>>> -import org.apache.openjpa.jdbc.sql.DBDictionary;
>>> -import org.apache.openjpa.jdbc.sql.DerbyDictionary;
>>> -import org.apache.openjpa.lib.jdbc.AbstractJDBCListener;
>>> -import org.apache.openjpa.lib.jdbc.JDBCEvent;
>>> -import org.apache.openjpa.lib.jdbc.JDBCListener;
>>> -import org.apache.openjpa.lib.jdbc.ReportingSQLException;
>>> -import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
>>> -import org.apache.openjpa.persistence.OpenJPAPersistence;
>>> -import org.apache.openjpa.persistence.test.AllowFailure;
>>>  +import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
>>>   /**
>>> - * Generic utility to run Criteria tests. + * Generic utility to run
>>> Criteria tests.
>>>  * - * Provides facility to compare the target SQL generated by good old
>>> JPQL
>>> - * and newly minted Criteria.
>>> + * Provides facility to compare the target SQL generated by good old
>>> JPQL and newly minted Criteria.
>>>  *  */
>>> -public abstract class CriteriaTest extends TestCase {
>>> +public abstract class CriteriaTest extends AbstractCriteriaTestCase {
>>>     protected static OpenJPAEntityManagerFactorySPI emf;
>>>     protected static SQLAuditor auditor;
>>> -    +
>>>     protected CriteriaBuilder cb;
>>>     protected EntityManager em;
>>> -    -    protected static Class[] CLASSES = {
>>> -            Account.class,
>>> -            Address.class,
>>> -            A.class,
>>> -            B.class,
>>> -            CompUser.class,
>>> -            Contact.class,
>>> -            Contractor.class,
>>> -            Course.class,
>>> -            CreditCard.class,
>>> -            Customer.class,
>>> -            C.class,
>>> -            Department.class,
>>> -            DependentId.class,
>>> -            Dependent.class,
>>> -            D.class,
>>> -            Employee.class,
>>> -            Exempt.class,
>>> -            FemaleUser.class,
>>> -            FrequentFlierPlan.class,
>>> -            Item.class,
>>> -            LineItem.class,
>>> -            Magazine.class,
>>> -            MaleUser.class,
>>> -            Manager.class,
>>> -            Movie.class,
>>> -            Order.class,
>>> -            Person.class,
>>> -            Phone.class,
>>> -            Photo.class,
>>> -            Product.class,
>>> -            Publisher.class,
>>> -            Request.class,
>>> -            Semester.class,
>>> -            Student.class,
>>> -            TransactionHistory.class,
>>> -            Transaction.class,
>>> -            VideoStore.class,
>>> -    };
>>> -    -    protected Class[] getDomainClasses() {
>>> +
>>> +    protected static Class<?>[] CLASSES =
>>> +        { Account.class, Address.class, A.class, B.class,
>>> CompUser.class, Contact.class, Contractor.class,
>>> +            Course.class, CreditCard.class, Customer.class, C.class,
>>> Department.class, DependentId.class,
>>> +            Dependent.class, D.class, Employee.class, Exempt.class,
>>> FemaleUser.class, FrequentFlierPlan.class,
>>> +            Item.class, LineItem.class, Magazine.class, MaleUser.class,
>>> Manager.class, Movie.class, Order.class,
>>> +            Person.class, Phone.class, Photo.class, Product.class,
>>> Publisher.class, Request.class, Semester.class,
>>> +            Student.class, TransactionHistory.class, Transaction.class,
>>> VideoStore.class, };
>>> +
>>> +    protected Class<?>[] getDomainClasses() {
>>>         return CLASSES;
>>>     }
>>> -    +
>>>     public void setUp() {
>>> -        if (emf == null) {
>>> +        if (getEntityManagerFactory() == null) {
>>>             auditor = new SQLAuditor();
>>> -            createNamedEMF(getDomainClasses());
>>> -            assertNotNull(emf);
>>> +            setEntityManagerFactory(createNamedEMF(getDomainClasses()));
>>> +            assertNotNull(getEntityManagerFactory());
>>>             setDictionary();
>>>         }
>>> -        em = emf.createEntityManager();
>>> -        cb = emf.getQueryBuilder();
>>> -    }
>>> -    -    /**
>>> -     * Create an entity manager factory for persistence unit
>>> <code>pu</code>.
>>> -     * Put {@link #CLEAR_TABLES} in
>>> -     * this list to tell the test framework to delete all table contents
>>> -     * before running the tests.
>>> -     *
>>> -     * @param props list of persistent types used in testing and/or
>>> -     * configuration values in the form key,value,key,value...
>>> -     */
>>> -    protected void createNamedEMF(Class<?>... types) {
>>> -        Map<Object,Object> map = new HashMap<Object,Object>();
>>> -        map.put("openjpa.jdbc.SynchronizeMappings",
>>> -                "buildSchema(ForeignKeys=true," -              +
>>> "SchemaAction='add')");
>>> -        map.put("openjpa.jdbc.QuerySQLCache", "false");
>>> -        map.put("openjpa.DynamicEnhancementAgent", "false");
>>> -        map.put("openjpa.RuntimeUnenhancedClasses", "unsupported");
>>> -        map.put("openjpa.Compatibility", "QuotedNumbersInQueries=true");
>>> -        map.put("openjpa.jdbc.JDBCListeners", new JDBCListener[] {
>>> auditor });
>>> -        -            StringBuffer buf = new StringBuffer();
>>> -            for (Class<?> c : types) {
>>> -                if (buf.length() > 0)
>>> -                    buf.append(";");
>>> -                buf.append(c.getName());
>>> -            }
>>> -           -            map.put("openjpa.MetaDataFactory", "jpa(Types="
>>> + buf.toString() + ")");
>>> -        -            Map<Object,Object> config = new
>>> HashMap<Object,Object>(System.getProperties());
>>> -            config.putAll(map);
>>> -            emf = (OpenJPAEntityManagerFactorySPI)
>>> Persistence.createEntityManagerFactory("test", config);
>>> -    }
>>> -
>>> -    void setDictionary() {
>>> -        JDBCConfiguration conf = (JDBCConfiguration)
>>> emf.getConfiguration();
>>> -        DBDictionary dict = conf.getDBDictionaryInstance();
>>> -        dict.requiresCastForComparisons = false;
>>> -        dict.requiresCastForMathFunctions = false;
>>> +        em = getEntityManagerFactory().createEntityManager();
>>> +        cb = getEntityManagerFactory().getQueryBuilder();
>>>     }
>>>  -    /**
>>> -     * Executes the given CriteriaQuery and JPQL string and compare
>>> their respective SQLs for equality.
>>> -     */
>>> -    void assertEquivalence(CriteriaQuery<?> c, String jpql) {
>>> -        assertEquivalence(c, jpql, null);
>>> -    }
>>> -    -    /**
>>> -     * Executes the given CriteriaQuery and JPQL string and compare
>>> their respective SQLs for equality.
>>> -     * Sets the supplied parameters, if any.
>>> -     */
>>> -    void assertEquivalence(CriteriaQuery<?> c, String jpql, String[]
>>> paramNames,  Object[] params) {
>>> -        Query cQ = em.createQuery(c);
>>> -        Query jQ = em.createQuery(jpql);
>>> -        setParameters(cQ, paramNames, params);
>>> -        setParameters(jQ, paramNames, params);
>>> -        -        executeAndCompareSQL(jpql, cQ, jQ);
>>> -    }
>>> -
>>> -    /**
>>> -     * Executes the given CriteriaQuery and JPQL string and compare
>>> their respective SQLs for equality.
>>> -     */
>>> -
>>> -    void assertEquivalence(CriteriaQuery<?> c, String jpql, Object[]
>>> params) {
>>> -        Query cQ = em.createQuery(c);
>>> -        Query jQ = em.createQuery(jpql);
>>> -        setParameters(cQ, params);
>>> -        setParameters(jQ, params);
>>> -        -        executeAndCompareSQL(jpql, cQ, jQ);
>>> -    }
>>> -
>>> -    /**
>>> -     * Execute the two given queries. The first query originated from a
>>> JPQL
>>> -     * string must be well-formed. The second query originated from a
>>> Criteria
>>> -     * is being tested.
>>> -     * -     * @param sqls The target SQL for the queries will be
>>> filled-in the given
>>> -     *            array.
>>> -     * @return true if both queries execute successfully.
>>> -     */
>>> -    void executeAndCompareSQL(String jpql, Query cQ, Query jQ) {
>>> -        List<String> jSQL = null;
>>> -        List<String> cSQL = null;
>>> -        try {
>>> -            jSQL = executeQueryAndCollectSQL(jQ);
>>> -        } catch (Exception e) {
>>> -            StringWriter w = new StringWriter();
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -            fail("JPQL " + jpql + " failed to execute\r\n" + w);
>>> -        }
>>> -        em.clear();
>>> -        try {
>>> -            cSQL = executeQueryAndCollectSQL(cQ);
>>> -        } catch (Exception e) {
>>> -            StringWriter w = new StringWriter();
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -            fail("CriteriaQuery corresponding to " + jpql + " failed to
>>> execute\r\n" + w);
>>> -        }
>>> -        -        printSQL("Target SQL for JPQL", jSQL);
>>> -        printSQL("Target SQL for CriteriaQuery", cSQL);
>>> -        if (jSQL.size() != cSQL.size()) {
>>> -            printSQL("Target SQL for JPQL", jSQL);
>>> -            printSQL("Target SQL for CriteriaQuery", cSQL);
>>> -            assertEquals("No. of SQL generated for JPQL and
>>> CriteriaQuery for " + jpql + " is different", -                 jSQL.size(),
>>> cSQL.size());
>>> -        }
>>> -        -        for (int i = 0; i < jSQL.size(); i++) {
>>> -            if (!jSQL.get(i).equals(cSQL.get(i))) {
>>> -                printSQL("Target SQL for JPQL", jSQL);
>>> -                printSQL("Target SQL for CriteriaQuery", cSQL);
>>> -                assertEquals(i + "-th SQL for JPQL and CriteriaQuery for
>>> " + jpql + " is different",
>>> -                     jSQL.get(i), cSQL.get(i));
>>> -            }
>>> -        }
>>> -    }
>>> -    -    void executeAndCompareSQL(String jpql, String expectedSQL) {
>>> -        JDBCConfiguration conf = (JDBCConfiguration)
>>> emf.getConfiguration();
>>> -        DBDictionary dict = conf.getDBDictionaryInstance();
>>> -
>>> -        Query jQ = em.createQuery(jpql);
>>> -
>>> -        List<String> jSQL = null;
>>> -        try {
>>> -            jSQL = executeQueryAndCollectSQL(jQ);
>>> -        } catch (Exception e) {
>>> -            StringWriter w = new StringWriter();
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -            fail("JPQL " + jpql + " failed to execute\r\n" + w);
>>> -        }
>>> -        -        printSQL("Target SQL for JPQL", jSQL);
>>> -        -        if (!(dict instanceof DerbyDictionary))
>>> -            return;
>>> -
>>> -        for (int i = 0; i < jSQL.size(); i++) {
>>> -            if (!jSQL.get(i).equals(expectedSQL)) {
>>> -                printSQL("SQL for JPQL", jSQL.get(i));
>>> -                printSQL("Expected SQL", expectedSQL);
>>> -                assertEquals(i + "-th Expected SQL and SQL for JPQL: " +
>>> jpql + " are different",
>>> -                     expectedSQL, jSQL.get(i));
>>> -            }
>>> -        }
>>> -    }
>>> -    -    void executeAndCompareSQL(Query jQ, String expectedSQL) {
>>> -        JDBCConfiguration conf = (JDBCConfiguration)
>>> emf.getConfiguration();
>>> -        DBDictionary dict = conf.getDBDictionaryInstance();
>>> -
>>> -        List<String> jSQL = null;
>>> -        try {
>>> -            jSQL = executeQueryAndCollectSQL(jQ);
>>> -        } catch (Exception e) {
>>> -            StringWriter w = new StringWriter();
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -        }
>>> -        -        if (!(dict instanceof DerbyDictionary))
>>> -            return;
>>> -
>>> -        printSQL("Expected SQL", expectedSQL);
>>> -        String jSql = jSQL.get(0).trim();
>>> -        if (jSql.indexOf("optimize for 1 row") != -1)
>>> -            jSql = jSql.substring(0, jSql.indexOf("optimize for 1
>>> row")).trim();
>>> -        -        if (!jSql.equals(expectedSQL)) {
>>> -            printSQL("SQL for JPQL", jSql);
>>> -            assertEquals(expectedSQL, jSql);
>>> -        }
>>> +    protected OpenJPAEntityManagerFactorySPI getEntityManagerFactory() {
>>> +        return emf;
>>>     }
>>>  -    void executeExpectFail(CriteriaQuery<?> c, String jpql) {
>>> -        List<String> cSQL = null;
>>> -        StringWriter w = new StringWriter();
>>> -        try {
>>> -            Query cQ = em.createQuery(c);
>>> -            cSQL = executeQueryAndCollectSQL(cQ);
>>> -            fail("CriteriaQuery corresponding to " + jpql + " is
>>> expected to fail\r\n" + w);
>>> -        } catch (Exception e) {
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -        }
>>> +    protected void
>>> setEntityManagerFactory(OpenJPAEntityManagerFactorySPI emf) {
>>> +        CriteriaTest.emf = emf;
>>>     }
>>>     -    void executeExpectFail(CriteriaQuery<?> c, String jpql, String[]
>>> paramNames, Object[] params) {
>>> -        List<String> cSQL = null;
>>> -        StringWriter w = new StringWriter();
>>> -        try {
>>> -            Query cQ = em.createQuery(c);
>>> -            for (int i = 0; i < params.length; i++)
>>> -                cQ.setParameter(paramNames[i], params[i]);
>>> -            cSQL = executeQueryAndCollectSQL(cQ);
>>> -            fail("CriteriaQuery corresponding to " + jpql + " is
>>> expected to fail\r\n" + w);
>>> -        } catch (Exception e) {
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -        }
>>> +    protected SQLAuditor getAuditor() {
>>> +        return auditor;
>>>     }
>>>     -    void executeExpectFail(String jpql) {
>>> -        List<String> jSQL = null;
>>> -        StringWriter w = new StringWriter();
>>> -        try {
>>> -            Query jQ = em.createQuery(jpql);
>>> -            jSQL = executeQueryAndCollectSQL(jQ);
>>> -            fail("JPQL " + jpql + " is expected to Failed to
>>> execute\r\n" + w);
>>> -        } catch (Exception e) {
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -        }
>>> +    protected void setAuditor(SQLAuditor auditor) { +
>>>  CriteriaTest.auditor = auditor;
>>>     }
>>>  -    void executeExpectFail(String jpql, String[] paramNames, Object[]
>>> params) {
>>> -        List<String> jSQL = null;
>>> -        StringWriter w = new StringWriter();
>>> -        try {
>>> -            Query jQ = em.createQuery(jpql);
>>> -            for (int i = 0; i < params.length; i++)
>>> -                jQ.setParameter(paramNames[i], params[i]);
>>> -            jSQL = executeQueryAndCollectSQL(jQ);
>>> -            fail("JPQL " + jpql + " is expected to Failed to
>>> execute\r\n" + w);
>>> -        } catch (Exception e) {
>>> -            e.printStackTrace(new PrintWriter(w));
>>> -        }
>>> +    protected CriteriaBuilder getCriteriaBuilder() {
>>> +        return cb;
>>>     }
>>>  -    void printSQL(String header, String sql) {
>>> -        System.err.println(header);
>>> -        System.err.println(sql);
>>> +    protected void setCriteriaBuilder(CriteriaBuilder cb) {
>>> +        this.cb = cb;
>>>     }
>>>  -    void printSQL(String header, List<String> sqls) {
>>> -        System.err.println(header);
>>> -        for (int i = 0; sqls != null && i < sqls.size(); i++) {
>>> -            System.err.println(i + ":" + sqls.get(i));
>>> -        }
>>> -    }
>>> -    -    void setParameters(Query q, String[] paramNames, Object[]
>>> params) {
>>> -        for (int i = 0; paramNames != null && i < paramNames.length;
>>> i++)
>>> -            q.setParameter(paramNames[i], params[i]);
>>> -    }
>>> -    -    void setParameters(Query q, Object[] params) {
>>> -        for (int i = 0; params != null && i < params.length; i++)
>>> -            q.setParameter(i+1, params[i]);
>>> -    }
>>> -    -    /**
>>> -     * Execute the given query and return the generated SQL.
>>> -     * If the query execution fail because the generated SQL is
>>> ill-formed, then raised exception should
>>> -     * carry the ill-formed SQL for diagnosis.  -     */
>>> -    List<String> executeQueryAndCollectSQL(Query q) {
>>> -        auditor.clear();
>>> -        try {
>>> -            List<?> result = q.getResultList();
>>> -        } catch (Exception e) {
>>> -            throw new RuntimeException(extractSQL(e), e);
>>> -        }    -        assertFalse(auditor.getSQLs().isEmpty());
>>> -        return auditor.getSQLs();
>>> -    }
>>> -    -    void executeAndCompareSQL(CriteriaQuery<?> q, String
>>> expectedSQL) {
>>> -        executeAndCompareSQL(em.createQuery(q), expectedSQL);
>>> +    protected EntityManager getEntityManager() {
>>> +        return em;
>>>     }
>>>  -    String extractSQL(Exception e) {
>>> -        Throwable t = e.getCause();
>>> -        if (t instanceof ReportingSQLException)
>>> -            return ((ReportingSQLException) t).getSQL();
>>> -        return "Can not extract SQL from exception " + e;
>>> -    }
>>> -    -    @Override
>>> -    public void runBare() throws Throwable {
>>> -        try {
>>> -            super.runBare();
>>> -        } catch (Throwable t) {
>>> -            AllowFailure allowFailure = getAllowFailure();
>>> -            if ( allowFailure != null && allowFailure.value()) {
>>> -                System.err.println("*** FAILED (but ignored): " + this);
>>> -                System.err.println("***              Reason : " -
>>>              + allowFailure.message());
>>> -                System.err.println("Stacktrace of failure");
>>> -                t.printStackTrace();
>>> -            } else {
>>> -                throw t;
>>> -            }
>>> -        }
>>> -    }
>>> -    -    /**
>>> -     * Affirms if the test case or the test method is annotated with -
>>>   * @AllowFailure. Method level annotation has higher precedence than Class
>>> -     * level annotation.
>>> -     * -     * Set -DIgnoreAllowFailure=true to ignore this directive
>>> altogether.
>>> -     */
>>> -    protected AllowFailure getAllowFailure() {
>>> -        if (Boolean.getBoolean("IgnoreAllowFailure"))
>>> -            return null;
>>> -        try {
>>> -            Method runMethod = getClass().getMethod(getName(),
>>> (Class[])null);
>>> -            AllowFailure anno =
>>> runMethod.getAnnotation(AllowFailure.class);
>>> -            if (anno != null)
>>> -                return anno;
>>> -        } catch (SecurityException e) {
>>> -            //ignore
>>> -        } catch (NoSuchMethodException e) {
>>> -            //ignore
>>> -        }
>>> -        return getClass().getAnnotation(AllowFailure.class);
>>> +    protected void setEntityManager(EntityManager em) {
>>> +        this.em = em;
>>>     }
>>> -
>>>     -    public class SQLAuditor extends AbstractJDBCListener {
>>> -        private List<String> sqls = new ArrayList<String>();
>>> -    -        @Override
>>> -        public void beforeExecuteStatement(JDBCEvent event) {
>>> -            if (event.getSQL() != null && sqls != null) {
>>> -                System.err.println("Adding " + event.getSQL());
>>> -               sqls.add(event.getSQL());
>>> -            }
>>> -        }
>>> -        -        void clear() {
>>> -            sqls.clear();
>>> -        }
>>> -        -        List<String> getSQLs() {
>>> -            return new ArrayList<String>(sqls);
>>> -        }
>>> -    }
>>>  }
>>>
>>> Added:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/EmbeddableDomainTestCase.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/EmbeddableDomainTestCase.java?rev=800847&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/EmbeddableDomainTestCase.java
>>> (added)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/EmbeddableDomainTestCase.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -0,0 +1,125 @@
>>> +/*
>>> + * 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.criteria;
>>> +
>>> +import javax.persistence.EntityManager;
>>> +
>>> +import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
>>> +import org.apache.openjpa.persistence.embed.Company1;
>>> +import org.apache.openjpa.persistence.embed.Company2;
>>> +import org.apache.openjpa.persistence.embed.Department1;
>>> +import org.apache.openjpa.persistence.embed.Department2;
>>> +import org.apache.openjpa.persistence.embed.Department3;
>>> +import org.apache.openjpa.persistence.embed.Division;
>>> +import org.apache.openjpa.persistence.embed.Embed;
>>> +import org.apache.openjpa.persistence.embed.Embed_Coll_Embed;
>>> +import org.apache.openjpa.persistence.embed.Embed_Coll_Integer;
>>> +import org.apache.openjpa.persistence.embed.Embed_Embed;
>>> +import org.apache.openjpa.persistence.embed.Embed_Embed_ToMany;
>>> +import org.apache.openjpa.persistence.embed.Embed_MappedToOne;
>>> +import org.apache.openjpa.persistence.embed.Embed_ToMany;
>>> +import org.apache.openjpa.persistence.embed.Embed_ToOne;
>>> +import org.apache.openjpa.persistence.embed.Employee1;
>>> +import org.apache.openjpa.persistence.embed.Employee2;
>>> +import org.apache.openjpa.persistence.embed.Employee3;
>>> +import org.apache.openjpa.persistence.embed.EmployeeName3;
>>> +import org.apache.openjpa.persistence.embed.EmployeePK2;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Coll_Embed_Embed;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Coll_Embed_ToOne;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Coll_String;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Embed_Coll_Embed;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Embed_Coll_Integer;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Embed_Embed;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Embed_Embed_ToMany;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Embed_MappedToOne;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Embed_ToMany;
>>> +import org.apache.openjpa.persistence.embed.EntityA_Embed_ToOne;
>>> +import org.apache.openjpa.persistence.embed.EntityB1;
>>> +import org.apache.openjpa.persistence.embed.Item1;
>>> +import org.apache.openjpa.persistence.embed.Item2;
>>> +import org.apache.openjpa.persistence.embed.Item3;
>>> +import org.apache.openjpa.persistence.embed.VicePresident;
>>> +
>>> +/**
>>> + */
>>> +public abstract class EmbeddableDomainTestCase extends
>>> AbstractCriteriaTestCase {
>>> +    protected static OpenJPAEntityManagerFactorySPI emf = null;
>>> +    protected static SQLAuditor auditor = null;
>>> +
>>> +    protected CriteriaBuilder cb;
>>> +    protected EntityManager em;
>>> +
>>> +    protected static Class<?>[] CLASSES =
>>> +        { Company1.class, Company2.class, Department1.class,
>>> Department2.class, Department3.class, Division.class,
>>> +            Embed.class, Embed_Coll_Embed.class,
>>> Embed_Coll_Integer.class, Embed_Embed.class, Embed_Embed_ToMany.class,
>>> +            Embed_MappedToOne.class, Embed_ToMany.class,
>>> Embed_ToOne.class, Employee1.class, Employee2.class,
>>> +            Employee3.class, EmployeeName3.class, EmployeePK2.class,
>>> EntityA_Coll_Embed_Embed.class,
>>> +            EntityA_Coll_Embed_ToOne.class, EntityA_Coll_String.class,
>>> EntityA_Embed_Coll_Embed.class,
>>> +            EntityA_Embed_Coll_Integer.class, EntityA_Embed_Embed.class,
>>> EntityA_Embed_Embed_ToMany.class,
>>> +            EntityA_Embed_MappedToOne.class, EntityA_Embed_ToMany.class,
>>> EntityA_Embed_ToOne.class, EntityB1.class,
>>> +            Item1.class, Item2.class, Item3.class, VicePresident.class
>>> };
>>> +
>>> +    protected Class<?>[] getDomainClasses() {
>>> +        return CLASSES;
>>> +    }
>>> +
>>> +    public void setUp() {
>>> +        if (getEntityManagerFactory() == null) {
>>> +            auditor = new SQLAuditor();
>>> +            setEntityManagerFactory(createNamedEMF(getDomainClasses()));
>>> +            assertNotNull(getEntityManagerFactory());
>>> +            setDictionary();
>>> +        }
>>> +        em = getEntityManagerFactory().createEntityManager();
>>> +        cb = getEntityManagerFactory().getQueryBuilder();
>>> +    }
>>> +
>>> +    protected OpenJPAEntityManagerFactorySPI getEntityManagerFactory() {
>>> +        return emf;
>>> +    }
>>> +
>>> +    protected void
>>> setEntityManagerFactory(OpenJPAEntityManagerFactorySPI emf) {
>>> +        EmbeddableDomainTestCase.emf = emf;
>>> +    }
>>> +
>>> +    protected SQLAuditor getAuditor() {
>>> +        return auditor;
>>> +    }
>>> +
>>> +    protected void setAuditor(SQLAuditor auditor) {
>>> +        EmbeddableDomainTestCase.auditor = auditor;
>>> +    }
>>> +
>>> +    protected CriteriaBuilder getCriteriaBuilder() {
>>> +        return cb;
>>> +    }
>>> +
>>> +    protected void setCriteriaBuilder(CriteriaBuilder cb) {
>>> +        this.cb = cb;
>>> +    }
>>> +
>>> +    protected EntityManager getEntityManager() {
>>> +        return em;
>>> +    }
>>> +
>>> +    protected void setEntityManager(EntityManager em) {
>>> +        this.em = em;
>>> +    }
>>> +
>>> +}
>>>
>>> Propchange:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/EmbeddableDomainTestCase.java
>>>
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>>
>>> Added:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/JoinDomainTestCase.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/JoinDomainTestCase.java?rev=800847&view=auto
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/JoinDomainTestCase.java
>>> (added)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/JoinDomainTestCase.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -0,0 +1,78 @@
>>> +/*
>>> + * 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.criteria;
>>> +
>>> +import javax.persistence.EntityManager;
>>> +
>>> +import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
>>> +
>>> +public abstract class JoinDomainTestCase extends
>>> AbstractCriteriaTestCase {
>>> +    protected static OpenJPAEntityManagerFactorySPI emf;
>>> +    protected static SQLAuditor auditor;
>>> +
>>> +    protected CriteriaBuilder cb;
>>> +    protected EntityManager em;
>>> +
>>> +    protected Class<?>[] getDomainClasses() {
>>> +        return new Class[]{A.class,B.class,C.class,D.class};
>>> +    }
>>> +
>>> +    public void setUp() {
>>> +        if (getEntityManagerFactory() == null) {
>>> +            auditor = new SQLAuditor();
>>> +            setEntityManagerFactory(createNamedEMF(getDomainClasses()));
>>> +            assertNotNull(getEntityManagerFactory());
>>> +            setDictionary();
>>> +        }
>>> +        em = getEntityManagerFactory().createEntityManager();
>>> +        cb = getEntityManagerFactory().getQueryBuilder();
>>> +    }
>>> +
>>> +    protected OpenJPAEntityManagerFactorySPI getEntityManagerFactory() {
>>> +        return emf;
>>> +    }
>>> +
>>> +    protected void
>>> setEntityManagerFactory(OpenJPAEntityManagerFactorySPI emf) {
>>> +        JoinDomainTestCase.emf = emf;
>>> +    }
>>> +
>>> +    protected SQLAuditor getAuditor() {
>>> +        return auditor;
>>> +    }
>>> +
>>> +    protected void setAuditor(SQLAuditor auditor) {
>>> +        JoinDomainTestCase.auditor = auditor;
>>> +    }
>>> +
>>> +    protected CriteriaBuilder getCriteriaBuilder() {
>>> +        return cb;
>>> +    }
>>> +
>>> +    protected void setCriteriaBuilder(CriteriaBuilder cb) {
>>> +        this.cb = cb;
>>> +    }
>>> +
>>> +    protected EntityManager getEntityManager() {
>>> +        return em;
>>> +    }
>>> +
>>> +    protected void setEntityManager(EntityManager em) {
>>> +        this.em = em;
>>> +    }
>>> +}
>>>
>>> Propchange:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/JoinDomainTestCase.java
>>>
>>> ------------------------------------------------------------------------------
>>>    svn:eol-style = native
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestEmbeddableCriteria.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestEmbeddableCriteria.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestEmbeddableCriteria.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestEmbeddableCriteria.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -33,6 +33,7 @@
>>>  import javax.persistence.criteria.Root;
>>>  import javax.persistence.criteria.Subquery;
>>>  +import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
>>>  import org.apache.openjpa.persistence.embed.Company1;
>>>  import org.apache.openjpa.persistence.embed.Company1_;
>>>  import org.apache.openjpa.persistence.embed.Company2;
>>> @@ -95,49 +96,7 @@
>>>  import org.apache.openjpa.persistence.test.AllowFailure;
>>>   -public class TestEmbeddableCriteria extends CriteriaTest {
>>> -    protected static Class[] CLASSES = {
>>> -    org.apache.openjpa.persistence.embed.Company1.class,
>>> -    org.apache.openjpa.persistence.embed.Company2.class,
>>> -    org.apache.openjpa.persistence.embed.Department1.class,
>>> -    org.apache.openjpa.persistence.embed.Department2.class,
>>> -    org.apache.openjpa.persistence.embed.Department3.class,
>>> -    org.apache.openjpa.persistence.embed.Division.class,
>>> -    org.apache.openjpa.persistence.embed.Embed.class,
>>> -    org.apache.openjpa.persistence.embed.Embed_Coll_Embed.class,
>>> -    org.apache.openjpa.persistence.embed.Embed_Coll_Integer.class,
>>> -    org.apache.openjpa.persistence.embed.Embed_Embed.class,
>>> -    org.apache.openjpa.persistence.embed.Embed_Embed_ToMany.class,
>>> -    org.apache.openjpa.persistence.embed.Embed_MappedToOne.class,
>>> -    org.apache.openjpa.persistence.embed.Embed_ToMany.class,
>>> -    org.apache.openjpa.persistence.embed.Embed_ToOne.class,
>>> -    org.apache.openjpa.persistence.embed.Employee1.class,
>>> -    org.apache.openjpa.persistence.embed.Employee2.class,
>>> -    org.apache.openjpa.persistence.embed.Employee3.class,
>>> -    org.apache.openjpa.persistence.embed.EmployeeName3.class,
>>> -    org.apache.openjpa.persistence.embed.EmployeePK2.class,
>>> -    org.apache.openjpa.persistence.embed.EntityA_Coll_Embed_Embed.class,
>>> -    org.apache.openjpa.persistence.embed.EntityA_Coll_Embed_ToOne.class,
>>> -    org.apache.openjpa.persistence.embed.EntityA_Coll_String.class,
>>> -    org.apache.openjpa.persistence.embed.EntityA_Embed_Coll_Embed.class,
>>> -
>>>  org.apache.openjpa.persistence.embed.EntityA_Embed_Coll_Integer.class,
>>> -    org.apache.openjpa.persistence.embed.EntityA_Embed_Embed.class,
>>> -
>>>  org.apache.openjpa.persistence.embed.EntityA_Embed_Embed_ToMany.class,
>>> -
>>>  org.apache.openjpa.persistence.embed.EntityA_Embed_MappedToOne.class,
>>> -    org.apache.openjpa.persistence.embed.EntityA_Embed_ToMany.class,
>>> -    org.apache.openjpa.persistence.embed.EntityA_Embed_ToOne.class,
>>> -    org.apache.openjpa.persistence.embed.EntityB1.class,
>>> -    org.apache.openjpa.persistence.embed.Item1.class,
>>> -    org.apache.openjpa.persistence.embed.Item2.class,
>>> -    org.apache.openjpa.persistence.embed.Item3.class,
>>> -    org.apache.openjpa.persistence.embed.VicePresident.class
>>> -    };       -
>>> -    @Override
>>> -    protected Class[] getDomainClasses() {
>>> -        return CLASSES;
>>> -    }
>>> -
>>> +public class TestEmbeddableCriteria extends EmbeddableDomainTestCase {
>>>     // can not translate to criteria
>>>     @AllowFailure
>>>     public void testEmbeddableQuery1() {
>>> @@ -1821,5 +1780,5 @@
>>>         Root<VicePresident> vp = q.from(VicePresident.class);
>>>         q.select(vp);
>>>         assertEquivalence(q, jpql);
>>> -    }        +    }
>>>  }
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJoinCondition.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJoinCondition.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJoinCondition.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestJoinCondition.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -34,11 +34,7 @@
>>>  * @author Pinaki Poddar
>>>  *
>>>  */
>>> -public class TestJoinCondition extends CriteriaTest {
>>> -    protected Class[] getDomainClasses() {
>>> -        return new Class[]{A.class,B.class,C.class,D.class};
>>> -    }
>>> -
>>> +public class TestJoinCondition extends JoinDomainTestCase {
>>>     public void testSingleAttributeJoinModel() {
>>>         CriteriaQuery<?> cq = cb.createQuery();
>>>         Root<A> a = cq.from(A.class);
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestMetaModelTypesafeCriteria.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -325,7 +325,7 @@
>>>              assertEquivalence(q, jpql);      }
>>> -
>>> +    @AllowFailure
>>>     public void testParameters() {
>>>         String jpql = "SELECT c FROM Customer c Where c.status = :stat";
>>>         CriteriaQuery<?> q = cb.createQuery();
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestStringCriteria.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -206,7 +206,8 @@
>>>                 assertEquivalence(q, jpql);      }
>>> -
>>> +      +    @AllowFailure
>>>     public void testParameters() {
>>>         String jpql = "SELECT c FROM Customer c Where c.status = :stat";
>>>         CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypeSafeCondExpression.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -154,6 +154,7 @@
>>>         assertEquivalence(cq, jpql);
>>>     }
>>>     +    @AllowFailure
>>>     public void testLikeWithEscapeCharacter() {
>>>         String query = "SELECT o.name FROM CompUser o WHERE o.name LIKE
>>> :name ESCAPE '|'";
>>>         @@ -490,6 +491,7 @@
>>>         assertEquivalence(q, query);
>>>     }
>>>  +    @AllowFailure
>>>     public void testTypeExpression1() {
>>>         String jpql = "SELECT e FROM CompUser e where TYPE(e) in (:a, :b)
>>> ORDER By e.name";
>>>         @@ -505,7 +507,7 @@
>>>              new Class[]{MaleUser.class,FemaleUser.class});
>>>     }
>>>  -    +    @AllowFailure
>>>     public void testTypeExpression2() {
>>>         String query = "SELECT TYPE(e) FROM CompUser e where TYPE(e) <>
>>> :t";
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/criteria/TestTypesafeCriteria.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -48,13 +48,13 @@
>>>  *  */
>>>  public class TestTypesafeCriteria extends CriteriaTest {
>>> -    +    @AllowFailure
>>>     public void testTrue() {
>>>         CriteriaQuery<Person> q = cb.createQuery(Person.class);
>>>         q.from(Person.class);
>>>         assertEquivalence(q.where(cb.literal(Boolean.TRUE)), "SELECT p
>>> FROM Person p WHERE 1=1");
>>>     }
>>> -    +    @AllowFailure
>>>     public void testFalse() {
>>>         CriteriaQuery<Person> q = cb.createQuery(Person.class);
>>>         q.from(Person.class);
>>> @@ -503,7 +503,7 @@
>>>           assertEquivalence(q, jpql);
>>>     }
>>> -
>>> +    @AllowFailure
>>>     public void testParameters1() {
>>>         String jpql = "SELECT c FROM Customer c Where c.status = :stat";
>>>         @@ -514,7 +514,7 @@
>>>           assertEquivalence(q, jpql, new String[] { "stat" }, new
>>> Object[] { 1 });
>>>     }
>>> -
>>> +    @AllowFailure
>>>     public void testParameters2() {
>>>         String jpql = "SELECT c FROM Customer c Where c.status = :stat
>>> AND c.name = :name";
>>>         @@ -528,7 +528,7 @@
>>>         assertEquivalence(q, jpql, new String[] { "stat", "name" },
>>>                 new Object[] { 1, "test" });
>>>     }
>>> -
>>> +    @AllowFailure
>>>     public void testParameters3() {
>>>         String jpql = "SELECT c FROM Customer c Where c.status = :stat";
>>>  @@ -539,7 +539,7 @@
>>>                 assertEquivalence(q, jpql, new String[]{"stat"}, new
>>> Object[] { 1 });
>>>     }
>>> -
>>> +    @AllowFailure
>>>     public void testParameters4() {
>>>         String jpql = "SELECT c FROM Customer c Where c.status = :stat
>>> AND c.name = :name";
>>>         @@ -552,7 +552,7 @@
>>>         assertEquivalence(q, jpql, new String[]{"stat", "name"},
>>>                 new Object[] { 1, "test" });
>>>     }
>>> -    +    @AllowFailure
>>>     public void testParameters5() {
>>>         String jpql = "SELECT c FROM Customer c Where c.status IN
>>> (:coll)";
>>>         @@ -818,6 +818,7 @@
>>>     /**
>>>      * 0-arg function works only if there is a other projection items to
>>> determine the table to select from.      */
>>> +    @AllowFailure
>>>     public void testFunctionWithNoArgument() {
>>>         String jpql = "SELECT c.balanceOwed FROM Customer c";
>>>         String sql = "SELECT CURRENT_USER(), t0.balanceOwed FROM CR_CUST
>>> t0";
>>>
>>> Modified:
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item1.java
>>> URL:
>>> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item1.java?rev=800847&r1=800846&r2=800847&view=diff
>>>
>>> ==============================================================================
>>> ---
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item1.java
>>> (original)
>>> +++
>>> openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/Item1.java
>>> Tue Aug  4 15:36:18 2009
>>> @@ -24,6 +24,7 @@
>>>  import javax.persistence.*;
>>>   @Entity
>>> +@Table(name="CR_EMBED_ITEM")
>>>  public class Item1 {
>>>     @Id
>>>     int id;
>>>
>>>
>>>
>>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message