mirror of https://github.com/apache/openjpa.git
OPENJPA-2233: Failed to invoke pcGetIDOwningClass method on embeddable entity with ID annotation
git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/2.0.x@1389523 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7a528a03e4
commit
290f0aeccb
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -214,4 +214,5 @@ temp-file-creation: The temporary file "{0}" was created and it may not get \
|
|||
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.
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
Loading…
Reference in New Issue