Fix for Issue 11 - Jaxrs and Inheritance - BeanDescriptor bug

This commit is contained in:
Robin Bygrave
2013-04-25 16:10:34 +12:00
parent 85f3a8987d
commit 97cc2984cf
7 changed files with 188 additions and 13 deletions
@@ -0,0 +1,38 @@
package com.avaje.tests.model.basic;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import javax.persistence.Version;
@Entity
@Table(name = "animals")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "species")
public abstract class Animal {
@Id
Long id;
@Version
Long version;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
}
@@ -0,0 +1,20 @@
package com.avaje.tests.model.basic;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("CAT")
public class Cat extends Animal {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@@ -0,0 +1,32 @@
package com.avaje.tests.model.basic;
import java.sql.Date;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("DOG")
public class Dog extends Animal {
String registrationNumber;
Date dateOfBirth;
public String getRegistrationNumber() {
return registrationNumber;
}
public void setRegistrationNumber(String registrationNumber) {
this.registrationNumber = registrationNumber;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
@@ -0,0 +1,62 @@
package com.avaje.tests.text.json;
import java.sql.Date;
import java.util.List;
import junit.framework.TestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.text.json.JsonContext;
import com.avaje.tests.model.basic.Animal;
import com.avaje.tests.model.basic.Cat;
import com.avaje.tests.model.basic.Dog;
public class TestJsonInheritanceDiscriminator extends TestCase {
public void testNoDiscriminator() {
Cat cat = new Cat();
cat.setName("Gemma");
Ebean.save(cat);
JsonContext json = Ebean.createJsonContext();
String jsonContent = json.toJsonString(cat);
Cat cat2 = json.toBean(Cat.class, jsonContent);
assertEquals(cat.getId(), cat2.getId());
assertEquals(cat.getName(), cat2.getName());
assertEquals(cat.getVersion(), cat2.getVersion());
String noDiscriminator = "{\"id\":1,\"name\":\"Gemma\",\"version\":1}";
Cat cat3 = json.toBean(Cat.class, noDiscriminator);
assertEquals(cat.getId(), cat3.getId());
assertEquals(cat.getName(), cat3.getName());
assertEquals(cat.getVersion(), cat3.getVersion());
Dog dog = new Dog();
dog.setRegistrationNumber("ABC123");
dog.setDateOfBirth(new Date(System.currentTimeMillis()));
Ebean.save(dog);
List<Animal> animals = Ebean.find(Animal.class).findList();
String listJson = json.toJsonString(animals, false);
List<Animal> animals2 = json.toList(Animal.class, listJson);
assertEquals(animals.size(), animals2.size());
String noDiscList = "[{\"id\":1,\"name\":\"Gemma\",\"version\":1},{\"name\":\"PussCat\",\"version\":1},{\"species\":\"CAT\",\"name\":\"PussCat\",\"version\":1}]";
List<Cat> cats = json.toList(Cat.class, noDiscList);
assertEquals(cats.size(), 3);
}
}