Skip to content

Instantly share code, notes, and snippets.

@peter-fu
Last active December 17, 2015 01:49
Show Gist options
  • Save peter-fu/5531097 to your computer and use it in GitHub Desktop.
Save peter-fu/5531097 to your computer and use it in GitHub Desktop.
This is a Self-Ref test case for Ebean ORM. Please create a package named com.avaje.tests.model.selfref, and put Customer.java under that. Please put TestTextJsonSelfRef.java under com.avaje.tests.text.json package.
package com.avaje.tests.model.selfref;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name="self_ref_customer")
public class Customer {
@Id
Long id;
String name;
@ManyToOne
@JoinColumn(name = "referred_by_id")
Customer referredBy;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Customer getReferredBy() {
return referredBy;
}
public void setReferredBy(Customer referredBy) {
this.referredBy = referredBy;
}
}
package com.avaje.tests.text.json;
import java.util.List;
import junit.framework.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.TxRunnable;
import com.avaje.tests.model.selfref.Customer;
public class TestTextJsonSelfRef extends BaseTestCase {
@Test
public void test() {
Ebean.execute(new TxRunnable() {
public void run() {
if (Ebean.find(Customer.class).findRowCount() == 0) {
Customer c1 = new Customer();
c1.setName("Foo");
c1.setReferredBy(c1);
Customer c2 = new Customer();
c2.setName("Bar");
c2.setReferredBy(c1);
Customer c3 = new Customer();
c3.setName("baz");
c3.setReferredBy(c1);
Ebean.save(c1);
Ebean.save(c2);
Ebean.save(c3);
}
}
});
List<Customer> customers = Ebean.find(Customer.class).orderBy("id desc").findList();
System.out.println("Customers: " + Ebean.createJsonContext().toJsonString(customers));
Assert.assertEquals(
"[{\"id\":3,\"name\":\"baz\",\"referredBy\":{\"id\":1}},{\"id\":2,\"name\":\"Bar\",\"referredBy\":{\"id\":1}},{\"id\":1,\"name\":\"Foo\",\"referredBy\":{\"id\":1}}]",
Ebean.createJsonContext().toJsonString(customers));
}
}
@peter-fu
Copy link
Author

peter-fu commented May 7, 2013

Expected result:
[{"id":3,"name":"baz","referredBy":{"id":1}},{"id":2,"name":"Bar","referredBy":{"id":1}},{"id":1,"name":"Foo","referredBy":{"id":1}}]

Actual result:
[{"id":3,"name":"baz","referredBy":{"id":1}},{"id":2,"name":"Bar","referredBy":{"id":1}},{"id":1}]

@rbygrave
Copy link

rbygrave commented May 7, 2013

Thanks Peter. I'll look to pull that test in tomorrow night. I'm pretty sure I follow what the issue is and your suggested fix. Ta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment