mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
FIX: improved support for @DbForeignKey(noConstraint = true) (#1527)
* FIX: improved support for DbForeignKey(noConstraint = true) * FIX: Tests for mariadb and sqlserver * FIX: SqlServer was still incorrect * FIX: not ommit property for formula * Update BeanDescriptor.java (typo fix) fix typo column (no code change!)
This commit is contained in:
committed by
Rob Bygrave
parent
3c6a52da31
commit
ce403e72a7
@@ -1,5 +1,6 @@
|
||||
package io.ebeaninternal.server.query;
|
||||
|
||||
import io.ebean.bean.EntityBean;
|
||||
import io.ebeaninternal.server.type.ScalarType;
|
||||
|
||||
public interface STreePropertyAssocOne extends STreePropertyAssoc {
|
||||
@@ -13,4 +14,14 @@ public interface STreePropertyAssocOne extends STreePropertyAssoc {
|
||||
* Return the scalar type of the associated id property.
|
||||
*/
|
||||
ScalarType<?> getIdScalarType();
|
||||
|
||||
/**
|
||||
* Returns true, if this relation has a foreign key.
|
||||
*/
|
||||
boolean hasForeignKey();
|
||||
|
||||
/**
|
||||
* Return the property value as an entity bean from the parent.
|
||||
*/
|
||||
public EntityBean getValueAsEntityBean(EntityBean parentBean);
|
||||
}
|
||||
|
||||
@@ -132,5 +132,13 @@ public interface STreeType {
|
||||
*/
|
||||
void inheritanceLoad(SqlBeanLoad sqlBeanLoad, STreeProperty property, DbReadContext ctx);
|
||||
|
||||
/**
|
||||
* Mark the bean as deleted by setting the softDelete property to true.
|
||||
*
|
||||
* This works also, if there is only a virtual softDelete property computed by a formula.
|
||||
*
|
||||
* If there is no softdelete property, it sets the lazyLoadFailure flag in EBI.
|
||||
*/
|
||||
void markAsDeleted(EntityBean bean);
|
||||
|
||||
}
|
||||
|
||||
@@ -498,8 +498,11 @@ public final class SqlTreeBuilder {
|
||||
|
||||
for (STreePropertyAssocOne propertyAssocOne : desc.propsOne()) {
|
||||
//noinspection StatementWithEmptyBody
|
||||
if (queryProps != null && queryProps.isIncludedBeanJoin(propertyAssocOne.getName())) {
|
||||
// if it is a joined bean... then don't add the property
|
||||
if (queryProps != null
|
||||
&& queryProps.isIncludedBeanJoin(propertyAssocOne.getName())
|
||||
&& propertyAssocOne.hasForeignKey()
|
||||
&& !propertyAssocOne.isFormula()) {
|
||||
// if it is a joined bean with FK constraint... then don't add the property
|
||||
// as it will have its own entire Node in the SqlTree
|
||||
} else {
|
||||
selectProps.add(propertyAssocOne);
|
||||
|
||||
@@ -266,6 +266,14 @@ class SqlTreeNodeBean implements SqlTreeNode {
|
||||
if (id == null) {
|
||||
// bean must be null...
|
||||
localBean = null;
|
||||
|
||||
// ... but there may exist as reference bean in parent which has to be marked as deleted.
|
||||
if (parentBean != null && nodeBeanProp instanceof STreePropertyAssocOne) {
|
||||
contextBean = ((STreePropertyAssocOne)nodeBeanProp).getValueAsEntityBean(parentBean);
|
||||
if (contextBean != null) {
|
||||
desc.markAsDeleted(contextBean);
|
||||
}
|
||||
}
|
||||
} else if (!temporalVersions) {
|
||||
// check the PersistenceContext to see if the bean already exists
|
||||
contextBean = (EntityBean) localDesc.contextPutIfAbsent(persistenceContext, id, localBean);
|
||||
|
||||
Reference in New Issue
Block a user