Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion framework/src/play/data/binding/ParamNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,16 @@ public String getOriginalKey() {
}

public static RootParamNode convert(Map<String, String[]> params) {
return convert(params, false);
}

public static RootParamNode convert(Map<String, String[]> params, boolean paramsFromYaml) {
RootParamNode root = new RootParamNode( params);

for (Map.Entry<String, String[]> e : params.entrySet()) {
String key = e.getKey();
String[] values = e.getValue();
if (values != null && values.length == 0) {
if (!paramsFromYaml && values != null && values.length == 0) {
values = null;
}

Expand Down
2 changes: 1 addition & 1 deletion framework/src/play/test/Fixtures.java
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ public static void loadModels(boolean loadAsTemplate, String name) {
Class<Model> cType = (Class<Model>)Play.classloader.loadClass(type);
final Map<String, String[]> resolvedFields = resolveDependencies(cType, fields);

RootParamNode rootParamNode = ParamNode.convert(resolvedFields);
RootParamNode rootParamNode = ParamNode.convert(resolvedFields, true);
// This is kind of hacky. This basically says that if we have an embedded class we should ignore it.
if (Model.class.isAssignableFrom(cType)) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
Expand All @@ -13,6 +15,7 @@

@Entity(name = "collections.BaseModel")
@Table(name = "collections_base_model")
@Inheritance(strategy=InheritanceType.JOINED)
public class BaseModel extends Model {

@OneToMany(mappedBy = "baseModel", cascade = CascadeType.ALL, orphanRemoval = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package models.orphans.collections;

import javax.persistence.Entity;
import javax.persistence.Table;

/**
* Model with preinitialized collection (e.g. one element)
*
*/
@Entity(name = "collections.DefaultModel")
@Table(name = "collections_default_model")
public class DefaultModel extends BaseModel {

public DefaultModel() {
super();
initLevelOnes();
}

private void initLevelOnes() {
LevelOne levelOne = new LevelOne();
levelOne.baseModel = this;
levelOnes.add(levelOne);
}

}
12 changes: 12 additions & 0 deletions samples-and-tests/just-test-cases/test/FixturesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

import javax.management.RuntimeErrorException;

import models.Bloc;
import models.orphans.collections.DefaultModel;
import models.vendor.Vendor;
import models.vendor.VenueVendor;
import models.vendor.tag.AreaTag;
Expand All @@ -17,6 +19,7 @@
import org.junit.Test;

import play.Logger;
import play.db.jpa.JPABase;
import play.test.Fixtures;
import play.test.UnitTest;

Expand Down Expand Up @@ -116,5 +119,14 @@ public void withEmbeddedCompositePrimaryKey() {
assertEquals("nutella", c.name);
}

@Test
public void checkEmptyCollections() {
Fixtures.load("emptycol.yml");
List<DefaultModel> defaultModels = DefaultModel.findAll();
assertEquals(1,defaultModels.size());
DefaultModel defaultModel = defaultModels.get(0);
// before #1868 you had 3 elements, the preinitialized and two additional from yaml
assertEquals(2, defaultModel.levelOnes.size());
}

}
8 changes: 8 additions & 0 deletions samples-and-tests/just-test-cases/test/emptycol.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
orphans.collections.DefaultModel(b1):
levelOnes: []

orphans.collections.LevelOne(l1):
baseModel: b1

orphans.collections.LevelOne(l2):
baseModel: b1