Description
Adding the following test case to ColumnSelectIT shows the problem:
@Test
public void testSharedCache() throws Exception {
ColumnSelect colQry = ObjectSelect.query( Artist.class )
.columns( Artist.ARTIST_NAME, Artist.DATE_OF_BIRTH )
.cacheStrategy( QueryCacheStrategy.SHARED_CACHE );
List<Object[]> result = colQry.select(context);
assertEquals(20, result.size());
// Next line fails with UnsupportedOperationException
List<Object[]> result2 = colQry.select(context);
assertEquals(20, result.size());
}
Stacktrace:
Exception in thread "JavaFX Application Thread" java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableCollection.removeIf(Collections.java:1120)
at org.apache.cayenne.access.DataDomainQueryAction$MixedConversionStrategy.convert(DataDomainQueryAction.java:818)
at org.apache.cayenne.access.DataDomainQueryAction.interceptObjectConversion(DataDomainQueryAction.java:507)
at org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:135)
at org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:570)
at org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:819)
at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:562)
at org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:406)
at org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:107)
at org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:94)
at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:960)
at org.apache.cayenne.access.DataContext.performQuery(DataContext.java:949)
at org.apache.cayenne.BaseContext.select(BaseContext.java:307)
at org.apache.cayenne.query.FluentSelect.select(FluentSelect.java:160)
Workaround: Add .suppressDistinct() to the query.