diff --git a/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java b/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java index bd26cfaee..c29e739c2 100644 --- a/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java +++ b/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java @@ -1,12 +1,12 @@ package io.ebeaninternal.server.dto; -import io.ebean.util.StringHelper; - import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import static io.ebean.util.StringHelper.replaceString; + /** * Holds property and constructor meta data for a given DTO bean type. * @@ -123,9 +123,11 @@ class DtoMeta { String upperLabel = label.toUpperCase(); DtoMetaProperty property = propMap.get(upperLabel); + if (property == null && upperLabel.startsWith("IS_")) { + property = propMap.get(upperLabel.substring(3)); + } if (property == null) { - upperLabel = StringHelper.replaceString(upperLabel, "_", ""); - property = propMap.get(upperLabel); + property = propMap.get(replaceString(upperLabel, "_", "")); } return property; } diff --git a/src/test/java/io/ebean/DtoQueryFromOrmTest.java b/src/test/java/io/ebean/DtoQueryFromOrmTest.java index aa0864faa..3cc969100 100644 --- a/src/test/java/io/ebean/DtoQueryFromOrmTest.java +++ b/src/test/java/io/ebean/DtoQueryFromOrmTest.java @@ -270,6 +270,24 @@ public class DtoQueryFromOrmTest extends BaseTestCase { assertThat(sql.get(0)).contains("select t0.last_name, count(*) totalCount from contact t0 where t0.last_name is not null group by t0.last_name having count(*) > ?"); } + @Test + public void toDto_withIsBooleanProperty() { + + ResetBasicData.reset(); + + DB.sqlUpdate("update contact set is_member=? where last_name like ?") + .setParams(true, "B%") + .execute(); + + final List contacts = + DB.find(Contact.class).select("lastName, isMember") + .where().eq("isMember", true) + .asDto(ContactMemberDto.class) + .findList(); + + assertThat(contacts).isNotEmpty(); + } + @Test public void toDto_fromExpressionList() { @@ -343,4 +361,26 @@ public class DtoQueryFromOrmTest extends BaseTestCase { this.id = id; } } + + public static class ContactMemberDto { + + String lastName; + boolean member; + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public boolean isMember() { + return member; + } + + public void setMember(boolean member) { + this.member = member; + } + } } diff --git a/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java b/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java index 3ba726544..2ef682863 100644 --- a/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java +++ b/src/test/java/io/ebeaninternal/server/grammer/EqlParserTest.java @@ -496,7 +496,7 @@ public class EqlParserTest extends BaseTestCase { Query query = parse("select name fetch billingAddress (line1, city) fetch contacts"); query.findList(); - assertThat(sqlOf(query, 12)).contains("select t0.id, t0.name, t1.id, t1.line_1, t1.city, t2.id, t2.first_name, t2.last_name, t2.phone, t2.mobile, t2.email, t2.cretime, t2.updtime, t2.customer_id, t2.group_id from o_customer t0"); + assertThat(sqlOf(query, 12)).contains("select t0.id, t0.name, t1.id, t1.line_1, t1.city, t2.id, t2.first_name, t2.last_name, t2.phone, t2.mobile, t2.email, t2.is_member, t2.cretime, t2.updtime, t2.customer_id, t2.group_id from o_customer t0"); } diff --git a/src/test/java/org/tests/model/basic/Contact.java b/src/test/java/org/tests/model/basic/Contact.java index be3c82f97..4612fbf14 100644 --- a/src/test/java/org/tests/model/basic/Contact.java +++ b/src/test/java/org/tests/model/basic/Contact.java @@ -39,6 +39,8 @@ public class Contact { String mobile; String email; + boolean isMember; + @DocEmbedded(doc = "id,name") @ManyToOne(optional = false) Customer customer; @@ -129,6 +131,14 @@ public class Contact { this.email = email; } + public boolean isMember() { + return isMember; + } + + public void setMember(boolean member) { + isMember = member; + } + public Customer getCustomer() { return customer; }