From 1a8a43603e30acc103065e8857ae7ad1a0582ff2 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 6 Nov 2019 20:33:56 +1300 Subject: [PATCH] #1849 - JoinColumn not found when using @Encrypted(dbEncryption = true) and findCount --- .../server/expression/SimpleExpression.java | 2 +- .../org/tests/basic/encrypt/TestEncrypt.java | 21 +++++++++ .../model/basic/EBasicEncryptRelate.java | 47 +++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/tests/model/basic/EBasicEncryptRelate.java diff --git a/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java b/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java index f694c78d0..0f8de90ec 100644 --- a/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java +++ b/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java @@ -104,7 +104,7 @@ public class SimpleExpression extends AbstractValueExpression { return; } if (prop.isDbEncrypted()) { - String dsql = prop.getBeanProperty().getDecryptSql(); + String dsql = prop.getBeanProperty().getDecryptProperty(propName); request.append(dsql).append(type.bind()); return; } diff --git a/src/test/java/org/tests/basic/encrypt/TestEncrypt.java b/src/test/java/org/tests/basic/encrypt/TestEncrypt.java index af60f0102..2a64c1288 100644 --- a/src/test/java/org/tests/basic/encrypt/TestEncrypt.java +++ b/src/test/java/org/tests/basic/encrypt/TestEncrypt.java @@ -10,6 +10,7 @@ import io.ebeaninternal.api.SpiEbeanServer; import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import org.tests.model.basic.EBasicEncrypt; +import org.tests.model.basic.EBasicEncryptRelate; import java.sql.Date; import java.util.List; @@ -34,6 +35,26 @@ public class TestEncrypt extends BaseTestCase { assertThat(loggedSql.get(0)).contains("; --bind(****,Rob%)"); } + @Test + @ForPlatform(Platform.H2) // only run this on H2 - PGCrypto not happy on CI server + public void testQueryJoin() { + + LoggedSqlCollector.start(); + + DB.find(EBasicEncryptRelate.class) + .where().eq("other.description", "foo") + .findList(); + + DB.find(EBasicEncryptRelate.class) + .where().eq("other.description", "foo") + .findCount(); + + List loggedSql = LoggedSqlCollector.stop(); + assertThat(loggedSql).hasSize(2); + assertThat(loggedSql.get(0)).contains("left join e_basicenc t1 on t1.id = t0.other_id"); + assertThat(loggedSql.get(1)).contains("left join e_basicenc t1 on t1.id = t0.other_id"); + } + @Test @ForPlatform(Platform.H2) public void test() { diff --git a/src/test/java/org/tests/model/basic/EBasicEncryptRelate.java b/src/test/java/org/tests/model/basic/EBasicEncryptRelate.java new file mode 100644 index 000000000..aaff1184e --- /dev/null +++ b/src/test/java/org/tests/model/basic/EBasicEncryptRelate.java @@ -0,0 +1,47 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +@Entity +@Table(name = "e_basicenc_relate") +public class EBasicEncryptRelate { + + @Id + private long id; + + private String name; + + @ManyToOne + private EBasicEncrypt other; + + public EBasicEncryptRelate(String name) { + this.name = name; + } + + 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 EBasicEncrypt getOther() { + return other; + } + + public void setOther(EBasicEncrypt other) { + this.other = other; + } +}