mirror of https://github.com/apache/openjpa.git
OPENJPA-1988: openjpa does not process persistence unit default <cascade-persist>
git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/2.3.x@1636446 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
64c1eb9273
commit
d07e3828c6
|
@ -64,6 +64,8 @@ public class FieldMapping
|
||||||
extends FieldMetaData
|
extends FieldMetaData
|
||||||
implements ValueMapping, FieldStrategy {
|
implements ValueMapping, FieldStrategy {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 142185362294762433L;
|
||||||
|
|
||||||
private static final Localizer _loc = Localizer.forPackage
|
private static final Localizer _loc = Localizer.forPackage
|
||||||
(FieldMapping.class);
|
(FieldMapping.class);
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,8 @@ public class ValueMappingImpl
|
||||||
extends ValueMetaDataImpl
|
extends ValueMetaDataImpl
|
||||||
implements ValueMapping {
|
implements ValueMapping {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 6440545965133775709L;
|
||||||
|
|
||||||
private static final Localizer _loc = Localizer.forPackage
|
private static final Localizer _loc = Localizer.forPackage
|
||||||
(ValueMappingImpl.class);
|
(ValueMappingImpl.class);
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,8 @@ public class FieldMetaData
|
||||||
extends Extensions
|
extends Extensions
|
||||||
implements ValueMetaData, MetaDataContext, MetaDataModes, Commentable {
|
implements ValueMetaData, MetaDataContext, MetaDataModes, Commentable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -566180883009883198L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constant specifying that no null-value was given.
|
* Constant specifying that no null-value was given.
|
||||||
*/
|
*/
|
||||||
|
@ -2191,6 +2193,10 @@ public class FieldMetaData
|
||||||
_val.setCascadePersist(persist);
|
_val.setCascadePersist(persist);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setCascadePersist(int cascade, boolean checkPUDefault) {
|
||||||
|
_val.setCascadePersist(cascade, checkPUDefault);
|
||||||
|
}
|
||||||
|
|
||||||
public int getCascadeAttach() {
|
public int getCascadeAttach() {
|
||||||
return _val.getCascadeAttach();
|
return _val.getCascadeAttach();
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,4 +127,12 @@ public interface MetaDataDefaults
|
||||||
*/
|
*/
|
||||||
public boolean isNonDefaultMappingAllowed(OpenJPAConfiguration conf);
|
public boolean isNonDefaultMappingAllowed(OpenJPAConfiguration conf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether cascade-persist was declared in the persistence unit defaults.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Boolean isDefaultCascadePersistEnabled();
|
||||||
|
|
||||||
|
public void setDefaultCascadePersistEnabled(Boolean bool);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,6 +162,14 @@ public class NoneMetaDataFactory
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean isDefaultCascadePersistEnabled() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultCascadePersistEnabled(Boolean bool) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isAbstractMappingUniDirectional(OpenJPAConfiguration conf) {
|
public boolean isAbstractMappingUniDirectional(OpenJPAConfiguration conf) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,6 +203,13 @@ public interface ValueMetaData
|
||||||
*/
|
*/
|
||||||
public void setCascadePersist(int cascade);
|
public void setCascadePersist(int cascade);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cascade behavior for persist operation.
|
||||||
|
*
|
||||||
|
* @see #getCascadePersist
|
||||||
|
*/
|
||||||
|
public void setCascadePersist(int cascade, boolean checkPUDefault);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cascade behavior for attach operation. Only applies to
|
* Cascade behavior for attach operation. Only applies to
|
||||||
* persistence-capable values. Options are:<br />
|
* persistence-capable values. Options are:<br />
|
||||||
|
|
|
@ -31,6 +31,8 @@ import org.apache.openjpa.util.UserException;
|
||||||
public class ValueMetaDataImpl
|
public class ValueMetaDataImpl
|
||||||
implements ValueMetaData {
|
implements ValueMetaData {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 6766697443293395831L;
|
||||||
|
|
||||||
private static final Localizer _loc = Localizer.forPackage
|
private static final Localizer _loc = Localizer.forPackage
|
||||||
(ValueMetaDataImpl.class);
|
(ValueMetaDataImpl.class);
|
||||||
|
|
||||||
|
@ -58,6 +60,7 @@ public class ValueMetaDataImpl
|
||||||
private int _resMode = MODE_NONE;
|
private int _resMode = MODE_NONE;
|
||||||
private String _mappedBy = null;
|
private String _mappedBy = null;
|
||||||
private FieldMetaData _mappedByMeta = null;
|
private FieldMetaData _mappedByMeta = null;
|
||||||
|
private boolean _checkPUDefaultCascadePersist = true;
|
||||||
|
|
||||||
protected ValueMetaDataImpl(FieldMetaData owner) {
|
protected ValueMetaDataImpl(FieldMetaData owner) {
|
||||||
_owner = owner;
|
_owner = owner;
|
||||||
|
@ -236,15 +239,52 @@ public class ValueMetaDataImpl
|
||||||
if (_owner.getManagement() != FieldMetaData.MANAGE_PERSISTENT)
|
if (_owner.getManagement() != FieldMetaData.MANAGE_PERSISTENT)
|
||||||
return CASCADE_NONE;
|
return CASCADE_NONE;
|
||||||
if (isDeclaredTypePC())
|
if (isDeclaredTypePC())
|
||||||
return _persist;
|
return checkPUDefaultCascadePersist();
|
||||||
if (!isTypePC())
|
if (!isTypePC())
|
||||||
return CASCADE_NONE;
|
return CASCADE_NONE;
|
||||||
// if only externalized type is pc, can't cascade immediate
|
// if only externalized type is pc, can't cascade immediate
|
||||||
return (_persist == CASCADE_IMMEDIATE) ? CASCADE_AUTO : _persist;
|
return (_persist == CASCADE_IMMEDIATE) ? CASCADE_AUTO : checkPUDefaultCascadePersist();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the persistence unit default <cascade-persist> has been enabled. If so, then change
|
||||||
|
* CASCADE_NONE to CASCADE_IMMEDIATE.
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private int checkPUDefaultCascadePersist() {
|
||||||
|
if (_checkPUDefaultCascadePersist) {
|
||||||
|
// Apply default <cascade-persist> only to entity relationships
|
||||||
|
boolean applyDefaultCascadePersist = false;
|
||||||
|
|
||||||
|
switch (_owner.getAssociationType()) {
|
||||||
|
case FieldMetaData.ONE_TO_ONE:
|
||||||
|
case FieldMetaData.ONE_TO_MANY:
|
||||||
|
case FieldMetaData.MANY_TO_MANY:
|
||||||
|
case FieldMetaData.MANY_TO_ONE:
|
||||||
|
applyDefaultCascadePersist = true;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
if (applyDefaultCascadePersist) {
|
||||||
|
Boolean dcpe = getRepository().getMetaDataFactory().getDefaults().isDefaultCascadePersistEnabled();
|
||||||
|
if (dcpe != null && dcpe.equals(Boolean.TRUE) && _persist == CASCADE_NONE) {
|
||||||
|
_persist = CASCADE_IMMEDIATE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_checkPUDefaultCascadePersist = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return _persist;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCascadePersist(int persist) {
|
public void setCascadePersist(int persist) {
|
||||||
|
setCascadePersist(persist, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCascadePersist(int persist, boolean checkPUDefault) {
|
||||||
_persist = persist;
|
_persist = persist;
|
||||||
|
_checkPUDefaultCascadePersist = checkPUDefault;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCascadeAttach() {
|
public int getCascadeAttach() {
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import javax.persistence.Basic;
|
||||||
|
import javax.persistence.Embeddable;
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
|
public class AnEmbeddable {
|
||||||
|
@Basic
|
||||||
|
private String eStrData;
|
||||||
|
|
||||||
|
public AnEmbeddable() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String geteStrData() {
|
||||||
|
return eStrData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void seteStrData(String eStrData) {
|
||||||
|
this.eStrData = eStrData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "AnEmbeddable [eStrData=" + eStrData + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,88 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import javax.persistence.Embeddable;
|
||||||
|
import javax.persistence.ManyToMany;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
|
||||||
|
@Embeddable
|
||||||
|
public class EmbeddableWithRelationships {
|
||||||
|
@ManyToMany
|
||||||
|
private Collection<PUDEntityB> colM2M;
|
||||||
|
|
||||||
|
@OneToMany
|
||||||
|
private Collection<PUDEntityB> colO2M;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
private PUDEntityB m2o;
|
||||||
|
|
||||||
|
@OneToOne
|
||||||
|
private PUDEntityB o2o;
|
||||||
|
|
||||||
|
public EmbeddableWithRelationships() {
|
||||||
|
colM2M = new ArrayList<PUDEntityB>();
|
||||||
|
colO2M = new ArrayList<PUDEntityB>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<PUDEntityB> getColM2M() {
|
||||||
|
return colM2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColM2M(Collection<PUDEntityB> colM2M) {
|
||||||
|
this.colM2M = colM2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<PUDEntityB> getColO2M() {
|
||||||
|
return colO2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColO2M(Collection<PUDEntityB> colO2M) {
|
||||||
|
this.colO2M = colO2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PUDEntityB getM2o() {
|
||||||
|
return m2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setM2o(PUDEntityB m2o) {
|
||||||
|
this.m2o = m2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PUDEntityB getO2o() {
|
||||||
|
return o2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setO2o(PUDEntityB o2o) {
|
||||||
|
this.o2o = o2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "EmbeddableWithRelationships [colM2M=" + colM2M + ", colO2M="
|
||||||
|
+ colO2M + ", m2o=" + m2o + ", o2o=" + o2o + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import javax.persistence.Basic;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.ManyToMany;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class PUDEntityA01 {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
private String strData;
|
||||||
|
|
||||||
|
@ManyToMany
|
||||||
|
private Collection<PUDEntityB> colM2M;
|
||||||
|
|
||||||
|
@OneToMany
|
||||||
|
private Collection<PUDEntityB> colO2M;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
private PUDEntityB m2o;
|
||||||
|
|
||||||
|
@OneToOne
|
||||||
|
private PUDEntityB o2o;
|
||||||
|
|
||||||
|
public PUDEntityA01() {
|
||||||
|
colM2M = new ArrayList<PUDEntityB>();
|
||||||
|
colO2M = new ArrayList<PUDEntityB>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStrData() {
|
||||||
|
return strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStrData(String strData) {
|
||||||
|
this.strData = strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<PUDEntityB> getColM2M() {
|
||||||
|
return colM2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColM2M(Collection<PUDEntityB> colM2M) {
|
||||||
|
this.colM2M = colM2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<PUDEntityB> getColO2M() {
|
||||||
|
return colO2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColO2M(Collection<PUDEntityB> colO2M) {
|
||||||
|
this.colO2M = colO2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PUDEntityB getM2o() {
|
||||||
|
return m2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setM2o(PUDEntityB m2o) {
|
||||||
|
this.m2o = m2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PUDEntityB getO2o() {
|
||||||
|
return o2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setO2o(PUDEntityB o2o) {
|
||||||
|
this.o2o = o2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "PUDEntityA01 [id=" + id + ", strData=" + strData + ", colM2M="
|
||||||
|
+ colM2M + ", colO2M=" + colO2M + ", m2o=" + m2o + ", o2o=" + o2o
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import javax.persistence.Basic;
|
||||||
|
import javax.persistence.Embedded;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class PUDEntityA02 {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
private String strData;
|
||||||
|
|
||||||
|
@Embedded
|
||||||
|
private EmbeddableWithRelationships emb;
|
||||||
|
|
||||||
|
public PUDEntityA02() {
|
||||||
|
emb = new EmbeddableWithRelationships();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStrData() {
|
||||||
|
return strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStrData(String strData) {
|
||||||
|
this.strData = strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EmbeddableWithRelationships getEmb() {
|
||||||
|
return emb;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmb(EmbeddableWithRelationships emb) {
|
||||||
|
this.emb = emb;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "PUDEntityA02 [id=" + id + ", strData=" + strData + ", emb="
|
||||||
|
+ emb + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,128 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import javax.persistence.Basic;
|
||||||
|
import javax.persistence.Embedded;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.ManyToMany;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class PUDEntityAE01 {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
private String strData;
|
||||||
|
|
||||||
|
@ManyToMany
|
||||||
|
private Collection<PUDEntityB> colM2M;
|
||||||
|
|
||||||
|
@OneToMany
|
||||||
|
private Collection<PUDEntityB> colO2M;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
private PUDEntityB m2o;
|
||||||
|
|
||||||
|
@OneToOne
|
||||||
|
private PUDEntityB o2o;
|
||||||
|
|
||||||
|
@Embedded
|
||||||
|
private AnEmbeddable ane;
|
||||||
|
|
||||||
|
public PUDEntityAE01() {
|
||||||
|
colM2M = new ArrayList<PUDEntityB>();
|
||||||
|
colO2M = new ArrayList<PUDEntityB>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStrData() {
|
||||||
|
return strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStrData(String strData) {
|
||||||
|
this.strData = strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<PUDEntityB> getColM2M() {
|
||||||
|
return colM2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColM2M(Collection<PUDEntityB> colM2M) {
|
||||||
|
this.colM2M = colM2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<PUDEntityB> getColO2M() {
|
||||||
|
return colO2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColO2M(Collection<PUDEntityB> colO2M) {
|
||||||
|
this.colO2M = colO2M;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PUDEntityB getM2o() {
|
||||||
|
return m2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setM2o(PUDEntityB m2o) {
|
||||||
|
this.m2o = m2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PUDEntityB getO2o() {
|
||||||
|
return o2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setO2o(PUDEntityB o2o) {
|
||||||
|
this.o2o = o2o;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AnEmbeddable getAne() {
|
||||||
|
return ane;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAne(AnEmbeddable ane) {
|
||||||
|
this.ane = ane;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "PUDEntityAE01 [id=" + id + ", strData=" + strData + ", colM2M="
|
||||||
|
+ colM2M + ", colO2M=" + colO2M + ", m2o=" + m2o + ", o2o=" + o2o
|
||||||
|
+ ", ane=" + ane + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import javax.persistence.Basic;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class PUDEntityB {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
private String strData;
|
||||||
|
|
||||||
|
public PUDEntityB() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStrData() {
|
||||||
|
return strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStrData(String strData) {
|
||||||
|
this.strData = strData;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "PUDEntityB [id=" + id + ", strData=" + strData + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,271 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
|
||||||
|
|
||||||
|
public class TestNoPUDefaultCascadePersist extends SingleEMFTestCase {
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
super.setUp(PUDEntityA01.class, PUDEntityAE01.class, PUDEntityB.class, AnEmbeddable.class,
|
||||||
|
CLEAR_TABLES);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2M() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColM2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2M() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColO2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2O() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setO2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2O() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setM2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2MWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColM2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2MWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColO2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2OWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setO2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2OWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setM2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
try {
|
||||||
|
em.getTransaction().commit();
|
||||||
|
fail("No Exception thrown.");
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,504 @@
|
||||||
|
/*
|
||||||
|
* 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.cascade.pudefault;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
|
||||||
|
import org.apache.openjpa.persistence.OpenJPAPersistence;
|
||||||
|
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
|
||||||
|
|
||||||
|
public class TestPUDefaultCascadePersist extends SingleEMFTestCase {
|
||||||
|
private EntityManagerFactory emf = null;
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
super.setUp();
|
||||||
|
emf = OpenJPAPersistence.
|
||||||
|
createEntityManagerFactory("TestPUDefaultCascadePersist",
|
||||||
|
"org/apache/openjpa/persistence/cascade/pudefault/META-INF/persistence.xml");
|
||||||
|
// super.setUp(PUDEntityA01.class, PUDEntityB.class,
|
||||||
|
// "org/apache/openjpa/persistence/cascade/pudefault/META-INF/cascadepersistorm.xml",
|
||||||
|
// CLEAR_TABLES);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
super.tearDown();
|
||||||
|
emf.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2M() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColM2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA01 f_entity = em.find(PUDEntityA01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertEquals(10, f_entity.getColM2M().size());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2M() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColO2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA01 f_entity = em.find(PUDEntityA01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertEquals(10, f_entity.getColO2M().size());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2O() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setO2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA01 f_entity = em.find(PUDEntityA01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertNotNull(entity.getO2o());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2O() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA01();
|
||||||
|
entity.setStrData("PUDEntityA01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setM2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA01 f_entity = em.find(PUDEntityA01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertNotNull(entity.getM2o());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2MWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColM2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityAE01 f_entity = em.find(PUDEntityAE01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertEquals(10, f_entity.getColM2M().size());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2MWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getColO2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityAE01 f_entity = em.find(PUDEntityAE01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertEquals(10, f_entity.getColO2M().size());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2OWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setO2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityAE01 f_entity = em.find(PUDEntityAE01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertNotNull(entity.getO2o());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2OWithEmbed() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityAE01 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityAE01();
|
||||||
|
entity.setStrData("PUDEntityAE01");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.setM2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityAE01 f_entity = em.find(PUDEntityAE01.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertNotNull(entity.getM2o());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2MEmbbedRel() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA02 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA02();
|
||||||
|
entity.setStrData("PUDEntityA02");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getEmb().getColM2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA02 f_entity = em.find(PUDEntityA02.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertEquals(10, f_entity.getEmb().getColM2M().size());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2MEmbbedRel() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA02 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA02();
|
||||||
|
entity.setStrData("PUDEntityA02");
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getEmb().getColO2M().add(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA02 f_entity = em.find(PUDEntityA02.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertEquals(10, f_entity.getEmb().getColO2M().size());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverO2OEmbbedRel() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA02 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA02();
|
||||||
|
entity.setStrData("PUDEntityA02");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getEmb().setO2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA02 f_entity = em.find(PUDEntityA02.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertNotNull(entity.getEmb().getO2o());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testPUDefaultCascadePersistOverM2OEmbbedRel() {
|
||||||
|
EntityManager em = emf.createEntityManager();
|
||||||
|
|
||||||
|
PUDEntityA02 entity = null;
|
||||||
|
try {
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
entity = new PUDEntityA02();
|
||||||
|
entity.setStrData("PUDEntityA02");
|
||||||
|
|
||||||
|
PUDEntityB b = new PUDEntityB();
|
||||||
|
b.setStrData("B");
|
||||||
|
entity.getEmb().setM2o(b);
|
||||||
|
|
||||||
|
em.persist(entity);
|
||||||
|
em.getTransaction().commit();
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
em.close();
|
||||||
|
em = emf.createEntityManager();
|
||||||
|
|
||||||
|
try {
|
||||||
|
PUDEntityA02 f_entity = em.find(PUDEntityA02.class, entity.getId());
|
||||||
|
assertNotNull(f_entity);
|
||||||
|
assertNotSame(entity, f_entity);
|
||||||
|
assertNotNull(entity.getEmb().getM2o());
|
||||||
|
} finally {
|
||||||
|
if (em.getTransaction().isActive()) {
|
||||||
|
em.getTransaction().rollback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
|
||||||
|
version="1.0">
|
||||||
|
<persistence-unit-metadata>
|
||||||
|
<persistence-unit-defaults>
|
||||||
|
<cascade-persist/>
|
||||||
|
</persistence-unit-defaults>
|
||||||
|
</persistence-unit-metadata>
|
||||||
|
</entity-mappings>
|
|
@ -0,0 +1,38 @@
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
|
||||||
|
version="1.0">
|
||||||
|
<persistence-unit name="TestPUDefaultCascadePersist" transaction-type="RESOURCE_LOCAL">
|
||||||
|
<!-- <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> -->
|
||||||
|
<mapping-file>org/apache/openjpa/persistence/cascade/pudefault/META-INF/cascadepersistorm.xml</mapping-file>
|
||||||
|
<class>org.apache.openjpa.persistence.cascade.pudefault.PUDEntityA01</class>
|
||||||
|
<class>org.apache.openjpa.persistence.cascade.pudefault.PUDEntityAE01</class>
|
||||||
|
<class>org.apache.openjpa.persistence.cascade.pudefault.PUDEntityA02</class>
|
||||||
|
<class>org.apache.openjpa.persistence.cascade.pudefault.PUDEntityB</class>
|
||||||
|
<class>org.apache.openjpa.persistence.cascade.pudefault.AnEmbeddable</class>
|
||||||
|
<class>org.apache.openjpa.persistence.cascade.pudefault.EmbeddableWithRelationships</class>
|
||||||
|
<properties>
|
||||||
|
<property name="openjpa.ConnectionFactoryProperties" value="MaxActive=110, MaxIdle=10, ValidationTimeout=50000,
|
||||||
|
MaxCachedStatements=10, ValidationSQL='', MaxWait=10000, TestOnBorrow=true" />
|
||||||
|
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)" />
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
</persistence>
|
|
@ -1770,7 +1770,7 @@ public class AnnotationPersistenceMetaDataParser
|
||||||
if (cascade == CascadeType.ALL || cascade == CascadeType.REMOVE)
|
if (cascade == CascadeType.ALL || cascade == CascadeType.REMOVE)
|
||||||
vmd.setCascadeDelete(ValueMetaData.CASCADE_IMMEDIATE);
|
vmd.setCascadeDelete(ValueMetaData.CASCADE_IMMEDIATE);
|
||||||
if (cascade == CascadeType.ALL || cascade == CascadeType.PERSIST)
|
if (cascade == CascadeType.ALL || cascade == CascadeType.PERSIST)
|
||||||
vmd.setCascadePersist(ValueMetaData.CASCADE_IMMEDIATE);
|
vmd.setCascadePersist(ValueMetaData.CASCADE_IMMEDIATE, false);
|
||||||
if (cascade == CascadeType.ALL || cascade == CascadeType.MERGE)
|
if (cascade == CascadeType.ALL || cascade == CascadeType.MERGE)
|
||||||
vmd.setCascadeAttach(ValueMetaData.CASCADE_IMMEDIATE);
|
vmd.setCascadeAttach(ValueMetaData.CASCADE_IMMEDIATE);
|
||||||
if (cascade == CascadeType.ALL || cascade == CascadeType.DETACH)
|
if (cascade == CascadeType.ALL || cascade == CascadeType.DETACH)
|
||||||
|
|
|
@ -133,6 +133,7 @@ public class PersistenceMetaDataDefaults
|
||||||
protected SetterFilter setterFilter = new SetterFilter();
|
protected SetterFilter setterFilter = new SetterFilter();
|
||||||
private Boolean _isAbstractMappingUniDirectional = null;
|
private Boolean _isAbstractMappingUniDirectional = null;
|
||||||
private Boolean _isNonDefaultMappingAllowed = null;
|
private Boolean _isNonDefaultMappingAllowed = null;
|
||||||
|
private Boolean _isCascadePersistPersistenceUnitDefaultEnabled = null;
|
||||||
|
|
||||||
public PersistenceMetaDataDefaults() {
|
public PersistenceMetaDataDefaults() {
|
||||||
setCallbackMode(CALLBACK_RETHROW | CALLBACK_ROLLBACK |
|
setCallbackMode(CALLBACK_RETHROW | CALLBACK_ROLLBACK |
|
||||||
|
@ -945,4 +946,13 @@ public class PersistenceMetaDataDefaults
|
||||||
_isNonDefaultMappingAllowed = conf.getCompatibilityInstance().
|
_isNonDefaultMappingAllowed = conf.getCompatibilityInstance().
|
||||||
isNonDefaultMappingAllowed();
|
isNonDefaultMappingAllowed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean isDefaultCascadePersistEnabled() {
|
||||||
|
return _isCascadePersistPersistenceUnitDefaultEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultCascadePersistEnabled(Boolean bool) {
|
||||||
|
_isCascadePersistPersistenceUnitDefaultEnabled = bool;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ import org.apache.openjpa.meta.FieldMetaData;
|
||||||
import org.apache.openjpa.meta.JavaTypes;
|
import org.apache.openjpa.meta.JavaTypes;
|
||||||
import org.apache.openjpa.meta.LifecycleMetaData;
|
import org.apache.openjpa.meta.LifecycleMetaData;
|
||||||
import org.apache.openjpa.meta.MetaDataContext;
|
import org.apache.openjpa.meta.MetaDataContext;
|
||||||
|
import org.apache.openjpa.meta.MetaDataDefaults;
|
||||||
import org.apache.openjpa.meta.MetaDataFactory;
|
import org.apache.openjpa.meta.MetaDataFactory;
|
||||||
import org.apache.openjpa.meta.UpdateStrategies;
|
import org.apache.openjpa.meta.UpdateStrategies;
|
||||||
|
|
||||||
|
@ -1330,6 +1331,8 @@ public class XMLPersistenceMetaDataParser
|
||||||
if (!isMetaDataMode())
|
if (!isMetaDataMode())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
boolean puDefault = false;
|
||||||
|
|
||||||
Set<CascadeType> cascades = null;
|
Set<CascadeType> cascades = null;
|
||||||
if (currentElement() instanceof FieldMetaData) {
|
if (currentElement() instanceof FieldMetaData) {
|
||||||
if (_cascades == null)
|
if (_cascades == null)
|
||||||
|
@ -1339,10 +1342,17 @@ public class XMLPersistenceMetaDataParser
|
||||||
if (_pkgCascades == null)
|
if (_pkgCascades == null)
|
||||||
_pkgCascades = EnumSet.noneOf(CascadeType.class);
|
_pkgCascades = EnumSet.noneOf(CascadeType.class);
|
||||||
cascades = _pkgCascades;
|
cascades = _pkgCascades;
|
||||||
|
puDefault = true;
|
||||||
}
|
}
|
||||||
boolean all = ELEM_CASCADE_ALL == tag;
|
boolean all = ELEM_CASCADE_ALL == tag;
|
||||||
if (all || ELEM_CASCADE_PER == tag)
|
if (all || ELEM_CASCADE_PER == tag) {
|
||||||
cascades.add(PERSIST);
|
cascades.add(PERSIST);
|
||||||
|
if (puDefault) {
|
||||||
|
MetaDataDefaults mdd = _repos.getMetaDataFactory().getDefaults();
|
||||||
|
mdd.setDefaultCascadePersistEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (all || ELEM_CASCADE_REM == tag)
|
if (all || ELEM_CASCADE_REM == tag)
|
||||||
cascades.add(REMOVE);
|
cascades.add(REMOVE);
|
||||||
if (all || ELEM_CASCADE_MER == tag)
|
if (all || ELEM_CASCADE_MER == tag)
|
||||||
|
@ -1371,7 +1381,7 @@ public class XMLPersistenceMetaDataParser
|
||||||
for (CascadeType cascade : cascades) {
|
for (CascadeType cascade : cascades) {
|
||||||
switch (cascade) {
|
switch (cascade) {
|
||||||
case PERSIST:
|
case PERSIST:
|
||||||
vmd.setCascadePersist(ValueMetaData.CASCADE_IMMEDIATE);
|
vmd.setCascadePersist(ValueMetaData.CASCADE_IMMEDIATE, false);
|
||||||
break;
|
break;
|
||||||
case MERGE:
|
case MERGE:
|
||||||
vmd.setCascadeAttach(ValueMetaData.CASCADE_IMMEDIATE);
|
vmd.setCascadeAttach(ValueMetaData.CASCADE_IMMEDIATE);
|
||||||
|
|
Loading…
Reference in New Issue