mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#461 - ENH: Add @Draftable support - optimise publish query
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.avaje.ebeaninternal.server.deploy;
|
||||
|
||||
import com.avaje.ebean.OrderBy;
|
||||
import com.avaje.ebean.Query;
|
||||
import com.avaje.ebean.SqlUpdate;
|
||||
import com.avaje.ebean.Transaction;
|
||||
import com.avaje.ebean.ValuePair;
|
||||
@@ -1941,6 +1942,13 @@ public class BeanDescriptor<T> implements MetaBeanInfo, SpiBeanType<T> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Optimise the draft query fetching any draftable element relationships.
|
||||
*/
|
||||
public void draftQueryOptimise(Query<T> query) {
|
||||
draftHelp.draftQueryOptimise(query);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this entity bean has history support.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.avaje.ebeaninternal.server.deploy;
|
||||
|
||||
import com.avaje.ebean.Query;
|
||||
import com.avaje.ebean.bean.EntityBean;
|
||||
|
||||
/**
|
||||
@@ -49,4 +50,25 @@ public final class BeanDescriptorDraftHelp<T> {
|
||||
|
||||
return liveBean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch draftable element relationships.
|
||||
*/
|
||||
public void draftQueryOptimise(Query<T> query) {
|
||||
|
||||
BeanPropertyAssocOne<?>[] one = desc.propertiesOne();
|
||||
for (int i = 0; i < one.length; i++) {
|
||||
if (one[i].getTargetDescriptor().isDraftableElement()) {
|
||||
query.fetch(one[i].getName());
|
||||
}
|
||||
}
|
||||
|
||||
BeanPropertyAssocMany<?>[] many = desc.propertiesMany();
|
||||
for (int i = 0; i < many.length; i++) {
|
||||
if (many[i].getTargetDescriptor().isDraftableElement()) {
|
||||
query.fetch(many[i].getName());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -134,6 +134,7 @@ public final class DefaultPersister implements Persister {
|
||||
|
||||
Class<T> beanType = query.getBeanType();
|
||||
BeanDescriptor<T> desc = server.getBeanDescriptor(beanType);
|
||||
desc.draftQueryOptimise(query);
|
||||
|
||||
List<T> draftBeans = server.findList(query, transaction);
|
||||
PUB.debug("publish [{}] count[{}]", desc.getName(), draftBeans.size());
|
||||
@@ -149,9 +150,10 @@ public final class DefaultPersister implements Persister {
|
||||
}
|
||||
|
||||
// fetch existing live beans to update (or insert if missing)
|
||||
Map<?, T> liveBeans = server.find(beanType)
|
||||
.where().idIn(idList)
|
||||
.findMap();
|
||||
Query<T> liveBeansQuery = server.find(beanType).where().idIn(idList).query();
|
||||
desc.draftQueryOptimise(liveBeansQuery);
|
||||
|
||||
Map<?, T> liveBeans = liveBeansQuery.findMap();
|
||||
|
||||
List<T> livePublish = new ArrayList<T>(idList.size());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user