You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2009/06/12 04:51:50 UTC
svn commit: r783968 - in /openjpa/trunk:
openjpa-kernel/src/main/java/org/apache/openjpa/meta/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/
Author: jrbauer
Date: Fri Jun 12 02:51:49 2009
New Revision: 783968
URL: http://svn.apache.org/viewvc?rev=783968&view=rev
Log:
OPENJPA-926 Do not validate access hierarchy when mapped superclass has no persistent attributes
Added:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java (with props)
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java (with props)
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java?rev=783968&r1=783967&r2=783968&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/ClassMetaData.java Fri Jun 12 02:51:49 2009
@@ -2138,8 +2138,9 @@
/**
* Assert that this class' access type is allowed.
* If no access style is set or an explicit style is set return.
- * Otherwise check that the superclass access style, if defaulted, is the
- * same as that of this receiver.
+ * Otherwise, if the superclass has persistent attributes, check that
+ * the superclass access style, if defaulted, is the same as that of this
+ * receiver.
*/
private void validateAccessType() {
if (AccessCode.isEmpty(_accessType)
@@ -2148,7 +2149,7 @@
ClassMetaData sup = getPCSuperclassMetaData();
while (sup != null && sup.isExplicitAccess())
sup = sup.getPCSuperclassMetaData();
- if (sup != null) {
+ if (sup != null && sup.getDeclaredFields().length > 0) {
int supCode = sup.getAccessType();
if (!AccessCode.isCompatibleSuper(_accessType, supCode))
throw new MetaDataException(_loc.get("access-inconsistent-inherit",
Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java?rev=783968&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java Fri Jun 12 02:51:49 2009
@@ -0,0 +1,34 @@
+/*
+ * 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.access;
+
+import javax.persistence.MappedSuperclass;
+import javax.persistence.PrePersist;
+
+/*
+ * Mapped superclass which contains no persistent attributes, but contains
+ * a callback.
+ */
+@MappedSuperclass
+public class MappedCallbackSup {
+
+ @PrePersist
+ public void prePersist() {
+ }
+}
Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/MappedCallbackSup.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java?rev=783968&view=auto
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java (added)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java Fri Jun 12 02:51:49 2009
@@ -0,0 +1,48 @@
+/*
+ * 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.access;
+
+import javax.persistence.Basic;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class PropEntity extends MappedCallbackSup {
+
+ private int id;
+ private String name;
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ @Id
+ public int getId() {
+ return id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Basic
+ public String getName() {
+ return name;
+ }
+}
Propchange: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/PropEntity.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java?rev=783968&r1=783967&r2=783968&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java (original)
+++ openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/access/TestDefaultAccess.java Fri Jun 12 02:51:49 2009
@@ -18,6 +18,9 @@
*/
package org.apache.openjpa.persistence.access;
+import java.util.Random;
+
+import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
@@ -31,55 +34,81 @@
public class TestDefaultAccess extends SingleEMFTestCase {
+ public void setUp() {
+ setUp(CLEAR_TABLES,
+ PropEntity.class, MappedCallbackSup.class);
+ }
+
+
+ /**
+ * Validates that an property access entity extending a mapped superclass
+ * containing no persistent fields (only a callback) does not cause access
+ * validation failures.
+ */
+ public void testDefaultMappedSuperclassAccess() {
+
+ EntityManager em = emf.createEntityManager();
+
+ PropEntity pe = new PropEntity();
+
+ pe.setId(new Random().nextInt());
+ pe.setName("Name");
+
+ em.getTransaction().begin();
+ em.persist(pe);
+ em.getTransaction().commit();
+ em.close();
+ }
+
/**
* Validates use of access specifier of FIELD in entity-mappings.
*/
public void testEMDefaultFieldAccess() {
- OpenJPAEntityManagerFactorySPI emf =
+ OpenJPAEntityManagerFactorySPI emf1 =
(OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
createEntityManagerFactory("Access-EMFldDef",
"org/apache/openjpa/persistence/access/" +
"access-def-persistence.xml");
- OpenJPAEntityManagerSPI em = emf.createEntityManager();
+ OpenJPAEntityManagerSPI em = emf1.createEntityManager();
verifyDefaultFieldAccess(em);
em.close();
- emf.close();
+ emf1.close();
}
/**
* Validates use of access specifier of PROPERTY in entity-mappings.
*/
public void testEMDefaultPropertyAccess() {
- OpenJPAEntityManagerFactorySPI emf =
+ OpenJPAEntityManagerFactorySPI emf1 =
(OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
createEntityManagerFactory("Access-EMPropDef",
"org/apache/openjpa/persistence/access/" +
"access-def-persistence.xml");
- OpenJPAEntityManagerSPI em = emf.createEntityManager();
+ OpenJPAEntityManagerSPI em = emf1.createEntityManager();
verifyDefaultPropertyAccess(em);
em.close();
- emf.close();
+ emf1.close();
}
/**
* Validates use of access specifier of FIELD in persistence unit defaults.
*/
public void testPUDefaultFieldAccess() {
- OpenJPAEntityManagerFactorySPI emf =
+ OpenJPAEntityManagerFactorySPI emf1 =
(OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
createEntityManagerFactory("Access-PUFldDef",
"org/apache/openjpa/persistence/access/" +
"access-pudef-persistence.xml");
- OpenJPAEntityManagerSPI em = emf.createEntityManager();
+ OpenJPAEntityManagerSPI em = emf1.createEntityManager();
verifyDefaultFieldAccess(em);
em.close();
- emf.close();
+ emf1.close();
}
/**
@@ -87,17 +116,17 @@
* defaults.
*/
public void testPUDefaultPropertyAccess() {
- OpenJPAEntityManagerFactorySPI emf =
+ OpenJPAEntityManagerFactorySPI emf1 =
(OpenJPAEntityManagerFactorySPI)OpenJPAPersistence.
createEntityManagerFactory("Access-PUPropDef",
"org/apache/openjpa/persistence/access/" +
"access-pudef-persistence.xml");
- OpenJPAEntityManagerSPI em = emf.createEntityManager();
+ OpenJPAEntityManagerSPI em = emf1.createEntityManager();
verifyDefaultPropertyAccess(em);
em.close();
- emf.close();
+ emf1.close();
}
private void verifyDefaultFieldAccess(OpenJPAEntityManagerSPI em) {