I tried 4.02.B2 with same behavior. Atte. Juan Manuel Díaz Lara
On Wednesday, November 29, 2017, 9:02:34 AM CST, Nikita Timofeev <ntimof...@objectstyle.com> wrote: Hi, Thanks for such a detailed information, we are investigating this behavior. Looks really like a bug to me. Meanwhile could you try latest 4.0.B2 release? On Wed, Nov 29, 2017 at 5:44 PM, Juan Manuel Diaz Lara <jmdia...@yahoo.com.invalid> wrote: > I have an entity Products with longvarbinary columns, and I was getting the > same entity duplicated on results when using queries that include conditions > on to-many relationships: > @Test > public void test() { > SelectQuery<Products> query = SelectQuery.query(Products.class); > query.setQualifier(ExpressionFactory.exp("code = 'USBVGA' and >existencias_corporativas.units > 0")); > query.setDistinct(true); > @SuppressWarnings("unchecked") > List<Products> lp = (List<Products>) dao.context.performQuery(query); > Assert.assertTrue(lp.size() == 1); > } > > existencias_corporativas is a toMany relationship from products (Products > -toMany->existencias_corporativas). > This test fails because the result list have many items, but all items are > the same product entity (in db code has a unique constraint). The > setDistinct() call did not help. I tried ObjectSelect with same result. > > Tracing code, I arrived to DefaultSelectTranslator#isUnsupportedForDistinct, > this is the cause for cayenne not including a DISTINCT in generated SQL, > because I have columns mapping to types "not supported for distinct clause". > But I found a note on DefaultSelectTranslator#isSuppressingDistinct that > tells that cayenne should should do an in-memory distinct operation when > DISTINCT clause was suppressed, so this is not working well (a bug ?). > I conclude that: > 1. Cayenne is deciding with types of columns can be used for DISTINCT, but > this is not generally true, some db's ignore not sortable columns when used > in DISTINCT queries. Maybe this decision should be delegated to the specific > db translator. > > 2. There is a bug because cayenne must perform the in-memory distinct when > suppressing DISTINCT in generated SQL. > > To prove, I removed my longvarbinary columns and the problem gone, a DISTINCT > SQL was generated and queries results does not have duplicates, this > confirming the previous conclusions. > Excuse me for reporting here, I do not know where or how to do. > > Thanks. > > Atte. Juan Manuel Díaz Lara -- Best regards, Nikita Timofeev