What this does is allow the developer to control how nulls are treated by default for stateless updates (when you don't explicitly specify which properties are to be updated).
/** * Force an update additionally specifying whether to * 'deleteMissingChildren' when the update cascades to a OneToMany or * ManyToMany. * <p> * By default the deleteMissingChildren is true and it is assumed that when * cascade saving a O2M or M2M relationship that the relationship is 'fully * loaded' and any child beans that are no longer on the relationship will * be deleted. * </p> * <p> * You can use this method to FORCE an update to occur (even on a bean that * has not been fetched but say built from JSON or XML). When * {@link EbeanServer#save(Object)} is used Ebean determines whether to use * an insert or an update based on the state of the bean. Using this method * will force an update to occur. * </p> * <p> * It is expected that this method is most useful in stateless REST services * or web applications where you have the values you wish to update but no * existing bean. * </p> * * @param bean * the bean to update * @param updateProps * optionally you can specify the properties to update (can be * null). * @param t * optionally you can specify the transaction to use (can be * null). * @param deleteMissingChildren * specify false if you do not want 'missing children' of a * OneToMany or ManyToMany to be automatically deleted. * @param updateNullProperties * specify true if by default you want properties with null * values to be included in the update and false if those * properties should be treated as 'unloaded' and excluded from * the update. This only takes effect if the updateProps is null. */ public void update(Object bean, Set<String> updateProps, Transaction t, boolean deleteMissingChildren, boolean updateNullProperties);
As a code example:
EbeanServer server = Ebean.getServer(null); EBasic e = new EBasic(); e.setName("something"); e.setStatus(Status.NEW); e.setDescription("wow"); // insert a row server.save(e); EBasic updateName = new EBasic(); updateName.setId(e.getId()); updateName.setName("justName"); // update just the name (non-null properties only) server.update(updateName, null, null, false, false); EBasic updateAll = new EBasic(); updateAll.setId(e.getId()); updateAll.setName("updAllProps"); // update all the properties server.update(updateAll, null, null, false, true);
Also note you can configure the default behaviour for with properties:
example:
ebean.defaultUpdateNullProperties=trueebean.defaultDeleteMissingChildren=true
So you might set these as the defaults when using GWT assuming your beans are fully populated (not partially loaded).
Fixed in HEAD.