mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#641 - ENH: Add EbeanServer.setBeanId(bean, id) ... to make it easy to convert id value to appropriate type and set
This commit is contained in:
@@ -146,6 +146,17 @@ public interface EbeanServer {
|
||||
*/
|
||||
Object getBeanId(Object bean);
|
||||
|
||||
/**
|
||||
* Set the Id value onto the bean converting the type of the id value if necessary.
|
||||
* <p>
|
||||
* For example, if the id value passed in is a String but ought to be a Long or UUID etc
|
||||
* then it will automatically be converted.
|
||||
* </p>
|
||||
* @param bean The entity bean to set the id value on.
|
||||
* @param id The id value to set.
|
||||
*/
|
||||
Object setBeanId(Object bean, Object id);
|
||||
|
||||
/**
|
||||
* Return a map of the differences between two objects of the same type.
|
||||
* <p>
|
||||
|
||||
@@ -1957,14 +1957,23 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
|
||||
return typeInfo != null && getBeanDescriptor(typeInfo.getBeanType()) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object setBeanId(Object bean, Object id) {
|
||||
EntityBean eb = checkEntityBean(bean);
|
||||
BeanDescriptor<?> desc = getBeanDescriptor(bean.getClass());
|
||||
if (desc == null) {
|
||||
throw new PersistenceException(bean.getClass().getName() + " is NOT an Entity Bean registered with this server?");
|
||||
}
|
||||
return desc.convertSetId(id, eb);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getBeanId(Object bean) {
|
||||
EntityBean eb = checkEntityBean(bean);
|
||||
BeanDescriptor<?> desc = getBeanDescriptor(bean.getClass());
|
||||
if (desc == null) {
|
||||
String m = bean.getClass().getName() + " is NOT an Entity Bean registered with this server?";
|
||||
throw new PersistenceException(m);
|
||||
throw new PersistenceException(bean.getClass().getName() + " is NOT an Entity Bean registered with this server?");
|
||||
}
|
||||
|
||||
return desc.getId(eb);
|
||||
}
|
||||
|
||||
|
||||
@@ -244,6 +244,11 @@ public class TDSpiEbeanServer implements SpiEbeanServer {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object setBeanId(Object bean, Object id) {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getBeanId(Object bean) {
|
||||
return null;
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.avaje.tests.basic;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import com.avaje.tests.model.basic.MyEBasicConfigStartup;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
@@ -11,10 +12,35 @@ import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.EbeanServer;
|
||||
import com.avaje.tests.model.basic.EBasic;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class TestExplicitInsert extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void setId_when_converted() {
|
||||
|
||||
EbeanServer server = Ebean.getDefaultServer();
|
||||
|
||||
Customer cust = new Customer();
|
||||
Object returnId = server.setBeanId(cust, "42");
|
||||
|
||||
assertThat(returnId).isEqualTo(42);
|
||||
assertThat(cust.getId()).isEqualTo(42);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setId_when_correctType() {
|
||||
|
||||
EbeanServer server = Ebean.getDefaultServer();
|
||||
|
||||
Customer customer = new Customer();
|
||||
Object returnId = server.setBeanId(customer, 42);
|
||||
|
||||
assertThat(returnId).isEqualTo(42);
|
||||
assertThat(customer.getId()).isEqualTo(42);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() throws InterruptedException {
|
||||
|
||||
@@ -27,7 +53,7 @@ public class TestExplicitInsert extends BaseTestCase {
|
||||
b.setDescription("explicit insert");
|
||||
b.setStatus(EBasic.Status.ACTIVE);
|
||||
|
||||
EbeanServer server = Ebean.getServer(null);
|
||||
EbeanServer server = Ebean.getDefaultServer();
|
||||
server.insert(b);
|
||||
|
||||
Assert.assertNotNull(b.getId());
|
||||
@@ -35,6 +61,9 @@ public class TestExplicitInsert extends BaseTestCase {
|
||||
Assert.assertEquals(b.getId(), server.getBeanId(b));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EBasic b2 = server.find(EBasic.class, b.getId());
|
||||
b2.setId(null);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user