mirror of https://github.com/apache/openjpa.git
OPENJPA-2325: MappedSuperClass without an @Id causes wrong identity type for the inherited types - back-ported to 2.0.x Pinaki Poddar's commit to trunk, as well as an additional change he made specific to 2.0.x.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/2.0.x@1469582 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
4487017fbf
commit
67f5e4c3c1
|
@ -4503,7 +4503,11 @@ public class BrokerImpl
|
|||
Object oid = ApplicationIds.create(pc, meta);
|
||||
if (oid == null)
|
||||
return false;
|
||||
return find(oid, null, EXCLUDE_ALL, null, 0) != null;
|
||||
|
||||
|
||||
return meta.getVersionField() != null
|
||||
? pc.pcGetVersion() != null && find(oid, null, EXCLUDE_ALL, null, 0) != null
|
||||
: find(oid, null, EXCLUDE_ALL, null, 0) != null;
|
||||
}
|
||||
|
||||
public OpenJPAStateManager getStateManager(Object obj) {
|
||||
|
|
|
@ -180,7 +180,7 @@ public class ClassMetaData
|
|||
private List<Class<?>> _interfaces = null;
|
||||
private final Map<Class<?>,Map<String,String>> _ifaceMap =
|
||||
new HashMap<Class<?>,Map<String,String>>();
|
||||
private int _identity = ID_UNKNOWN;
|
||||
private Integer _identity = null;
|
||||
private int _idStrategy = ValueStrategies.NONE;
|
||||
private int _accessType = AccessCode.UNKNOWN;
|
||||
private boolean _replicated = false;
|
||||
|
@ -430,21 +430,24 @@ public class ClassMetaData
|
|||
* primary key fields, and {@link #ID_APPLICATION} otherwise.
|
||||
*/
|
||||
public int getIdentityType() {
|
||||
if (_identity == ID_UNKNOWN) {
|
||||
ClassMetaData sup = getPCSuperclassMetaData();
|
||||
if (sup != null && sup.getIdentityType() != ID_UNKNOWN)
|
||||
_identity = sup.getIdentityType();
|
||||
else if (getPrimaryKeyFields().length > 0)
|
||||
_identity = ID_APPLICATION;
|
||||
else if (isMapped())
|
||||
_identity = ID_DATASTORE;
|
||||
else
|
||||
_identity = _repos.getMetaDataFactory().getDefaults().
|
||||
if (_identity != null) {
|
||||
return _identity;
|
||||
} else {
|
||||
ClassMetaData sup = getPCSuperclassMetaData();
|
||||
if (sup != null && sup.getIdentityType() != ID_UNKNOWN)
|
||||
_identity = sup.getIdentityType();
|
||||
else if (getPrimaryKeyFields().length > 0)
|
||||
_identity = ID_APPLICATION;
|
||||
else if (isMapped())
|
||||
_identity = ID_DATASTORE;
|
||||
else if (isAbstract())
|
||||
_identity = ID_UNKNOWN;
|
||||
else
|
||||
_identity = _repos.getMetaDataFactory().getDefaults().
|
||||
getDefaultIdentityType();
|
||||
}
|
||||
return _identity;
|
||||
}
|
||||
|
||||
}
|
||||
return _identity;
|
||||
}
|
||||
/**
|
||||
* The type of identity being used. This will be one of:
|
||||
* <ul>
|
||||
|
@ -2497,8 +2500,9 @@ public class ClassMetaData
|
|||
_embeddable = meta._embeddable;
|
||||
_interface = (meta.isManagedInterface()) ? Boolean.TRUE : Boolean.FALSE;
|
||||
setIntercepting(meta.isIntercepting());
|
||||
_abstract = meta.isAbstract();
|
||||
_impl = meta.getInterfaceImpl();
|
||||
_identity = meta.getIdentityType();
|
||||
_identity = meta._identity == null ? null : meta.getIdentityType();
|
||||
_idStrategy = meta.getIdentityStrategy();
|
||||
_seqName = meta.getIdentitySequenceName();
|
||||
_seqMeta = null;
|
||||
|
|
Loading…
Reference in New Issue