mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#693 - ENH: Add support for mapping @DbJson to list of scalar types like List<String>
This commit is contained in:
@@ -13,16 +13,16 @@ public class DbTypeMapTest {
|
||||
PostgresPlatform pg = new PostgresPlatform();
|
||||
DbTypeMap dbTypeMap = pg.getDbTypeMap();
|
||||
|
||||
assertThat(dbTypeMap.lookup("clob").renderType(0,0)).isEqualTo("text");
|
||||
assertThat(dbTypeMap.lookup("CLOB").renderType(0, 0)).isEqualTo("text");
|
||||
assertThat(dbTypeMap.lookup("clob", false).renderType(0,0)).isEqualTo("text");
|
||||
assertThat(dbTypeMap.lookup("CLOB", false).renderType(0, 0)).isEqualTo("text");
|
||||
|
||||
assertThat(dbTypeMap.lookup("varchar").renderType(20,0)).isEqualTo("varchar(20)");
|
||||
assertThat(dbTypeMap.lookup("varchar", true).renderType(20,0)).isEqualTo("varchar(20)");
|
||||
|
||||
assertThat(dbTypeMap.lookup("json").renderType(0,0)).isEqualTo("json");
|
||||
assertThat(dbTypeMap.lookup("jsonb").renderType(0,0)).isEqualTo("jsonb");
|
||||
assertThat(dbTypeMap.lookup("jsonclob").renderType(0,0)).isEqualTo("text");
|
||||
assertThat(dbTypeMap.lookup("jsonblob").renderType(0,0)).isEqualTo("bytea");
|
||||
assertThat(dbTypeMap.lookup("jsonvarchar").renderType(200,0)).isEqualTo("varchar(200)");
|
||||
assertThat(dbTypeMap.lookup("json", false).renderType(0,0)).isEqualTo("json");
|
||||
assertThat(dbTypeMap.lookup("jsonb", false).renderType(0,0)).isEqualTo("jsonb");
|
||||
assertThat(dbTypeMap.lookup("jsonclob", false).renderType(0,0)).isEqualTo("text");
|
||||
assertThat(dbTypeMap.lookup("jsonblob", false).renderType(0,0)).isEqualTo("bytea");
|
||||
assertThat(dbTypeMap.lookup("jsonvarchar", false).renderType(200,0)).isEqualTo("varchar(200)");
|
||||
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ public class DbTypeMapTest {
|
||||
|
||||
DbTypeMap dbTypeMap = DbTypeMap.logicalTypes();
|
||||
DbType dbType = dbTypeMap.get(DbType.JSON);
|
||||
DbType json = dbTypeMap.lookup("json");
|
||||
DbType json = dbTypeMap.lookup("json", false);
|
||||
|
||||
assertThat(dbType).isSameAs(json);
|
||||
}
|
||||
|
||||
@@ -246,4 +246,18 @@ public class EJsonTests {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void parse_when_null() throws IOException {
|
||||
|
||||
Object nothing = EJson.parse((String) null);
|
||||
Assert.assertNull(nothing);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parseList_when_null() throws IOException {
|
||||
|
||||
Object nothing = EJson.parseList((String) null);
|
||||
Assert.assertNull(nothing);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -98,7 +98,7 @@ public class CachedBeanDataSerializeTest extends BaseTestCase {
|
||||
|
||||
TBytesOnly bean = new TBytesOnly();
|
||||
bean.setId(42);
|
||||
bean.setContent(stringContent.getBytes("UTF8"));
|
||||
bean.setContent(stringContent.getBytes("UTF-8"));
|
||||
|
||||
BeanDescriptor<TBytesOnly> desc = getBeanDescriptor(TBytesOnly.class);
|
||||
CachedBeanData extract = CachedBeanDataFromBean.extract(desc, (EntityBean)bean);
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package com.avaje.tests.json;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.tests.model.json.EBasicJsonList;
|
||||
import org.avaje.ebeantest.LoggedSqlCollector;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class TestDbJson_List extends BaseTestCase {
|
||||
|
||||
private EBasicJsonList bean = new EBasicJsonList();
|
||||
|
||||
private EBasicJsonList found;
|
||||
|
||||
@Test
|
||||
public void insert() {
|
||||
|
||||
bean.setName("stuff");
|
||||
|
||||
List<String> tags = bean.getTags();
|
||||
tags.add("one");
|
||||
tags.add("two");
|
||||
|
||||
Ebean.save(bean);
|
||||
|
||||
found = Ebean.find(EBasicJsonList.class, bean.getId());
|
||||
|
||||
assertThat(found.getTags()).containsExactly("one", "two");
|
||||
|
||||
json_parse_format();
|
||||
update_when_notDirty();
|
||||
update_when_dirty();
|
||||
}
|
||||
|
||||
//@Test//(dependsOnMethods = "insert")
|
||||
public void json_parse_format() {
|
||||
|
||||
String asJson = Ebean.json().toJson(found);
|
||||
assertThat(asJson).contains("\"tags\":[\"one\",\"two\"]");
|
||||
assertThat(asJson).contains("\"id\":");
|
||||
|
||||
EBasicJsonList fromJson = Ebean.json().toBean(EBasicJsonList.class, asJson);
|
||||
assertEquals(found.getId(), fromJson.getId());
|
||||
assertEquals(found.getId(), fromJson.getId());
|
||||
assertEquals(found.getName(), fromJson.getName());
|
||||
assertThat(fromJson.getTags()).containsExactly("one", "two");
|
||||
}
|
||||
|
||||
//@Test//(dependsOnMethods = "insert")
|
||||
public void update_when_notDirty() {
|
||||
|
||||
found.setName("mod");
|
||||
LoggedSqlCollector.start();
|
||||
Ebean.save(found);
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
|
||||
// we don't update the phone numbers (as they are not dirty)
|
||||
assertThat(sql.get(0)).contains("update ebasic_json_list set name=?, version=? where");
|
||||
}
|
||||
|
||||
public void update_when_dirty() {
|
||||
|
||||
//found.setName("modAgain");
|
||||
found.getTags().add("three");
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
Ebean.save(found);
|
||||
List<String> sql = LoggedSqlCollector.stop();
|
||||
|
||||
// we don't update the phone numbers (as they are not dirty)
|
||||
assertThat(sql.get(0)).contains("update ebasic_json_list set tags=?, version=? where");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package com.avaje.tests.model.json;
|
||||
|
||||
import com.avaje.ebean.annotation.DbJson;
|
||||
import com.avaje.ebean.annotation.DbJsonType;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Version;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Entity
|
||||
public class EBasicJsonList {
|
||||
|
||||
@Id
|
||||
Long id;
|
||||
|
||||
String name;
|
||||
|
||||
@DbJson(length = 100, storage = DbJsonType.VARCHAR)
|
||||
List<String> tags = new ArrayList<String>();
|
||||
|
||||
@Version
|
||||
Long version;
|
||||
|
||||
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 List<String> getTags() {
|
||||
return tags;
|
||||
}
|
||||
|
||||
public void setTags(List<String> tags) {
|
||||
this.tags = tags;
|
||||
}
|
||||
|
||||
public Long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(Long version) {
|
||||
this.version = version;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user