You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jg...@apache.org on 2012/09/19 23:39:10 UTC
svn commit: r1387783 - in /openjpa/branches/2.0.x:
openjpa-kernel/src/main/java/org/apache/openjpa/enhance/
openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/
ope...
Author: jgrassel
Date: Wed Sep 19 21:39:09 2012
New Revision: 1387783
URL: http://svn.apache.org/viewvc?rev=1387783&view=rev
Log:
OPENJPA-2233: Failed to invoke pcGetIDOwningClass method on embeddable entity with ID annotation
Added:
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/TestEmbeddableEntityWithIDAnnotation.java
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/EmbeddableEntityWithIDAnnotation.java
openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/IDOwningClassTestEntity.java
Modified:
openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
openjpa/branches/2.0.x/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties
Modified: openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java?rev=1387783&r1=1387782&r2=1387783&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java (original)
+++ openjpa/branches/2.0.x/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/PCEnhancer.java Wed Sep 19 21:39:09 2012
@@ -1150,6 +1150,11 @@ public class PCEnhancer {
if (_meta.hasAbstractPKField() == true) {
addGetIDOwningClass();
}
+
+ if (_meta.isEmbeddedOnly() && _meta.getIdentityType() == ClassMetaData.ID_APPLICATION) {
+ _log.error(_loc.get("ID-field-in-embeddable-unsupported", _meta.toString()));
+ }
+
addNewObjectIdInstanceMethod(true);
addNewObjectIdInstanceMethod(false);
}
@@ -2582,13 +2587,12 @@ public class PCEnhancer {
// new <oid class> ();
code.anew().setType(oidType);
code.dup();
- if (_meta.isOpenJPAIdentity() || (obj && usesClsString ==
- Boolean.TRUE)) {
- if(_meta.isEmbeddedOnly() || _meta.hasAbstractPKField() == true ) {
+ if (_meta.isOpenJPAIdentity() || (obj && usesClsString == Boolean.TRUE)) {
+ if ((_meta.isEmbeddedOnly() && ! (_meta.getIdentityType() == ClassMetaData.ID_APPLICATION))
+ || _meta.hasAbstractPKField() == true ) {
code.aload().setThis();
- code.invokevirtual().setMethod(PRE + "GetIDOwningClass",
- Class.class, null);
- }else {
+ code.invokevirtual().setMethod(PRE + "GetIDOwningClass", Class.class, null);
+ } else {
code.classconstant().setClass(getType(_meta));
}
}
Modified: openjpa/branches/2.0.x/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties?rev=1387783&r1=1387782&r2=1387783&view=diff
==============================================================================
--- openjpa/branches/2.0.x/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties (original)
+++ openjpa/branches/2.0.x/openjpa-kernel/src/main/resources/org/apache/openjpa/enhance/localizer.properties Wed Sep 19 21:39:09 2012
@@ -214,4 +214,5 @@ temp-file-creation: The temporary file "
get-field: Error while getting value of field {1} from instance {0} by reflection.
get-method: Error while getting value by getter method {1} on instance {0} by reflection.
set-field: Error while setting value {2} of {3} on field {1} of instance {0} by reflection.
-set-method: Error while setting value {2} of {3} by setter method {1} of instance {0} by reflection.
+set-method: Error while setting value {2} of {3} by setter method {1} of instance {0} by reflection.
+ID-field-in-embeddable-unsupported: The identity field defined in the embeddable entity {0} is not supported.
Added: openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/TestEmbeddableEntityWithIDAnnotation.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/TestEmbeddableEntityWithIDAnnotation.java?rev=1387783&view=auto
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/TestEmbeddableEntityWithIDAnnotation.java (added)
+++ openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/TestEmbeddableEntityWithIDAnnotation.java Wed Sep 19 21:39:09 2012
@@ -0,0 +1,49 @@
+/*
+ * 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.enhance;
+
+import javax.persistence.EntityManager;
+
+import org.apache.openjpa.persistence.enhance.common.apps.EmbeddableEntityWithIDAnnotation;
+import org.apache.openjpa.persistence.enhance.common.apps.IDOwningClassTestEntity;
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
+
+public class TestEmbeddableEntityWithIDAnnotation extends SQLListenerTestCase{
+
+ public void setUp() {
+ setUp(EmbeddableEntityWithIDAnnotation.class, IDOwningClassTestEntity.class, CLEAR_TABLES);
+ }
+
+ //make sure no exception is thrown here.
+ public void testpcNewObjectIdInstanceMethod(){
+ EntityManager em = emf.createEntityManager();
+ try{
+ IDOwningClassTestEntity e = new IDOwningClassTestEntity();
+ em.getTransaction().begin();
+ em.persist(e);
+ em.getTransaction().commit();
+ assertTrue(em.createQuery("select count(c) from IDOwningClassTestEntity c", Long.class)
+ .getSingleResult().longValue() > 0);
+ }finally{
+ em.close();
+ }
+ }
+
+}
Added: openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/EmbeddableEntityWithIDAnnotation.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/EmbeddableEntityWithIDAnnotation.java?rev=1387783&view=auto
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/EmbeddableEntityWithIDAnnotation.java (added)
+++ openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/EmbeddableEntityWithIDAnnotation.java Wed Sep 19 21:39:09 2012
@@ -0,0 +1,105 @@
+/*
+ * 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.enhance.common.apps;
+
+// default package
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.SequenceGenerator;
+
+/**
+ * BillingNoteId entity. @author MyEclipse Persistence Tools
+ */
+@Embeddable
+public class EmbeddableEntityWithIDAnnotation implements java.io.Serializable
+{
+
+ private static final long serialVersionUID = 558333273831654654L;
+
+ private Long id;
+
+ private Long seqNo = new Long(2012);
+
+ public EmbeddableEntityWithIDAnnotation( )
+ {
+ }
+
+ public EmbeddableEntityWithIDAnnotation( Long id, Long seqNo )
+ {
+ this.id = id;
+ this.seqNo = seqNo;
+ }
+
+ // Property accessors
+ @Id
+ @Column(unique=true, nullable=false, precision=12, scale=0)
+ public Long getId()
+ {
+ return this.id;
+ }
+
+ public void setId( Long id )
+ {
+ this.id = id;
+ }
+
+ @Column( name = "EmbeddableEntitySeqNo", nullable = false, precision = 12, scale = 0 )
+ public Long getSeqNo()
+ {
+ return this.seqNo;
+ }
+
+ public void setSeqNo( Long seqNo )
+ {
+ this.seqNo = seqNo;
+ }
+
+ public boolean equals( Object other )
+ {
+ if ( ( this == other ) )
+ return true;
+ if ( ( other == null ) )
+ return false;
+ if ( !( other instanceof EmbeddableEntityWithIDAnnotation ) )
+ return false;
+ EmbeddableEntityWithIDAnnotation castOther = ( EmbeddableEntityWithIDAnnotation ) other;
+
+ return ( ( this.getId( ) == castOther.getId( ) )
+ || ( this.getId( ) != null && castOther.getId( ) != null
+ && this.getId( ).equals( castOther.getId( ) ) ) )
+ && ( ( this.getSeqNo( ) == castOther.getSeqNo( ) )
+ || ( this.getSeqNo( ) != null && castOther.getSeqNo( ) != null
+ && this.getSeqNo( ).equals( castOther.getSeqNo( ) ) ) );
+ }
+
+ public int hashCode()
+ {
+ int result = 17;
+
+ result = 37 * result + ( getId( ) == null ? 0 : this.getId( ).hashCode( ) );
+ result = 37 * result + ( getSeqNo( ) == null ? 0 : this.getSeqNo( ).hashCode( ) );
+ return result;
+ }
+
+}
Added: openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/IDOwningClassTestEntity.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/IDOwningClassTestEntity.java?rev=1387783&view=auto
==============================================================================
--- openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/IDOwningClassTestEntity.java (added)
+++ openjpa/branches/2.0.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/enhance/common/apps/IDOwningClassTestEntity.java Wed Sep 19 21:39:09 2012
@@ -0,0 +1,32 @@
+/*
+ * 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.enhance.common.apps;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+@Entity
+public class IDOwningClassTestEntity {
+ @EmbeddedId
+ EmbeddableEntityWithIDAnnotation pk = new EmbeddableEntityWithIDAnnotation(new Long(2012), new Long(2000));
+
+ String name;
+
+}