Apache Cayenne Release Notes
============================

For the latest information visit project web site:
https://cayenne.apache.org/

To browse individual bug reports check out project issue tracker:
https://issues.apache.org/jira/browse/CAY

----------------------------------
Release: 5.0-RC1
Date: Oct 30, 2026
----------------------------------
Changes/New Features:

CAY-2875 Allow storing UUIDs in binary columns
CAY-2998 Modeler: clickabe "Target" column to navigate relationships
CAY-3000 Modeler: unifying the main views of all model objects
CAY-3004 Modeler: Rework DbEntity PK generation UI to match the XML model
CAY-3007 Deprecate SelectById
CAY-3010 LocalDateTime and friends should be accessed directly via JDBC
CAY-3012 Improve reflection performance
CAY-3013 MySQL: JDBC-level streaming for iterators
CAY-3014 Remove QueryChain
CAY-3015 Get rid of RefreshQuery
CAY-3016 Get rid of RelationshipQuery
CAY-3017 ObjectContext should not be a DataChannel
CAY-3019 Skip noop conditions in generated SQL
CAY-3020 Remove serialization contracts
CAY-3021 Get rid of ObjectIdQuery
CAY-3022 Cleanup ObjectContext / DataContext query API
CAY-3023 Replace QueryResult with a List of redesigned QueryResult items
CAY-3024 Replace QueryResponse with List<QueryResult>
CAY-3025 ObjectContext to require/return Persistent for all object ops
CAY-3026 Parseable ObjectSelect / ColumnSelect
CAY-3027 Replace StringIdQuery with StringIdFetcher
CAY-3028 Im-memory evaluation of ASTSum
CAY-3034 Remove "cayenne-osgi" module
CAY-3035 Remove "cayenne-lifecycle" module
CAY-3036 Auto-upgrade projects in runtime
CAY-3037 Switch ObjectSelect query format in XML to the parsable string
CAY-3038 Remove EJBQLQuery
CAY-3039 Refactor Expressions to be independent from the parser syntax
CAY-3040 Descriptive XML tags for mapped queries
CAY-3041 Unify XML style across XSDs
CAY-3042 Rename "domain" to "project" in the Modeler and XSD
CAY-3043 project.xsd, dataMap.xsd: replace "property" with top tag attributes
CAY-3047 Per-statement "snapshotVersion"
CAY-3048 Per-object locking in the ObjectStore
CAY-3049 Cheap ClockMap to replace ConcurrentLinkedHashMap
CAY-3050 Array-based DataRows
CAY-3051 Replace PropertyVisitor with ClassDescriptor property collections
CAY-3054 Remove ObjRelationship.isReadOnly()
CAY-3056 Switch DataMap queries to the new query parser
CAY-3057 Improve parameter binding in the query parser
CAY-3066 Modeler: update SQLTemplate editor UI

Bug Fixes:

CAY-2779 "Nullify" delete rules is not processed with n:m and inheritance hierarchy
CAY-2832 SelectActionIT is failing on GitHub Actions
CAY-2911 Vertical Inheritance: Column Select Sometimes Null With Vertically Inherited Entity
CAY-2996 Javadocs are missing from the central artifacts
CAY-2999 Modeler: A restricted method in java.lang.System has been called
CAY-3001 Modeler: Auto-increment attribute is not picked up
CAY-3002 Modeler: NPE after clicking path chooser
CAY-3003 Modeler: NPE editing unmapped ObjAttribute
CAY-3005 ResultIterator.allRows() doesn't convert to DataObjects
CAY-3006 Can't match a "self" property of an entity with a compound PK
CAY-3008 Disjoint prefetch returns wrong results when the query matches on a "self" property
CAY-3009 Column select with CLOB attribute and distinct() fails
CAY-3011 PostgreSQL: use transactions on select with fetch size
CAY-3018 EJBQL: broken joins when selecting a vertically inherited entity
CAY-3030 Cayenne stack must be able to start without touching the DataSource
CAY-3031 Expression parameter names may conflict with function names
CAY-3032 ColumnSelect: an entity column over a to-many relationship filters out root rows with no related objects
CAY-3033 Selects with subqueries produce conflicting cache keys
CAY-3044 Paginated query with a joint to-many prefetch returns duplicate ids and unresolved Integer elements
CAY-3045 Race condition: ClassCastException resolving a to-one fault concurrently on a shared DataContext
CAY-3046 Refreshing an object from a snapshot discards to-ones, causing fault resolution on a shared DataContext
CAY-3052 Modeler: inconsistent classloading in dbimport
CAY-3053 Untyped #bind of java.time values fails with "conversion to VARBINARY is not supported"

----------------------------------
Release: 5.0-M3
Date: Aug 21, 2026
----------------------------------
Changes/New Features:

CAY-2861 Derby version upgrade
CAY-2912 Compact SQL logger
CAY-2954 Don't wrap selecting queries in transactions
CAY-2956 Get rid of a dedicated adapter for Oracle 8
CAY-2957 Get rid of adapter for legacy HSQLDB <= 1.8
CAY-2962 Allow unconstrained VARCHAR
CAY-2963 Replace TypesHandler / types.xml with hardcoded map
CAY-2969 Extender API for "soft" delete
CAY-2970 Tighten deferred value resolution contract on commit
CAY-2971 Remove extra spaces within SQL parenthesis
CAY-2972 Fewer parentheses in generated SQL
CAY-2974 CayenneSqlException with a reference to translated query
CAY-2975 Mnemonic table aliases in generated SQL
CAY-2978 AI skill: "cayenne-model-naming"
CAY-2979 AI skill: "cayenne-full-db-sync"
CAY-2980 Improve model name generation
CAY-2981 Remove DataNode from XML mapping
CAY-2982 Modeler: when upgrading projects allow upgraders to send outcome messages
CAY-2983 CayenneDataSource: Public-facing DataSource builder
CAY-2984 Remove "DataChannel" injectable dependency
CAY-2985 DataDomain init and structure cleanup
CAY-2986 Cgen to run unconditionally
CAY-2987 DataNode to own PkGenerator
CAY-2989 Upgrade MCP SDK to 2.0
CAY-2992 dbimport: support postgres drivers newer than 42.7.4
CAY-2994 cgen: improve path handling
CAY-2995 Migrate Modeler to FlatLaf library

Bug Fixes:

CAY-2892 Modeler: Exception when deleting a callback
CAY-2941 Modeler won't start on Windows on Java 25
CAY-2958 Empty join is saved
CAY-2959 Modeler: DbRelationship dialog "Cancel" doesn't cancel
CAY-2960 Undoing renamed relationship change throws
CAY-2961 PostgreSQL "text" column is reverse-engineered as CLOB
CAY-2964 ClassCastException for non-generated meaningful PKs
CAY-2965 MCP Cgen should not fail on an absent "<cgen>" tag
CAY-2966 "comment" field is lost when upgrading from v10 to v12
CAY-2967 SQLTemplate/SQLSelect broken pagination
CAY-2968 Vertical Inheritance: INSERT instead of UPDATE after updating flattened attribute
CAY-2973 Exception trying to copy/paste a callback
CAY-2976 Exception creating a relationship for an Incomplete ObjEntity
CAY-2977 DbImport confused by multi-key relationships
CAY-2988 Iterated queries commit transactions they don't own
CAY-2990 Gradle plugin tests are failing on Windows

----------------------------------
Release: 5.0-M2
Date: June 23, 2026
----------------------------------
Changes/New Features:

CAY-2859 Redesign SelectById factory methods
CAY-2873 Change Orderings.orderedList() to accept a Collection rather than a List
CAY-2884 Upgrade gradle to 8.13
CAY-2893 Update velocity-engine-core dependency
CAY-2897 Add no-op default implementations to the GraphChangeHandler interface
CAY-2905 Upgrade Gradle to 8.14
CAY-2906 In-memory evaluation of `(not) exists` expressions
CAY-2908 Review and upgrade dependencies
CAY-2916 SelectById: unify logic for null/empty values
CAY-2917 Add Qualifier Joins Before Depenent Table Joins
CAY-2918 Remove OGNL Binding Architecture from CayenneModeler
CAY-2920 Remove "Reengineer Database Schema" menu
CAY-2922 Modeler: remove support for upgrading from file-based preferences
CAY-2923 Modeler: Restore table cell editor borders
CAY-2924 Move MapEvent and subclasses from the core to the Modeler
CAY-2925 Remove "cayenne-modeler-maven-plugin"
CAY-2927 Modeler: Better-looking "Update Entity Class Name" dialog
CAY-2928 Modeler: remove floating log console modality
CAY-2929 Modeler: Prefrences management UI
CAY-2930 Modeler: remove "rename" button from DB Import toolbar
CAY-2932 Remove "Generate Classes" menu
CAY-2933 Modeler: DB Type Column Unreadable for Selected Rows
CAY-2935 Upgrade Cayenne 5.0 to Java 21
CAY-2936 Add a placeholder MCP server to the Modeler distribution
CAY-2937 Decommission "graph" Support
CAY-2938 Modeler: prettier DB Import - part 1
CAY-2940 Upgrade to SLF4J version 2.0.17
CAY-2942 CayenneModeler MCP: cgen_run tool
CAY-2943 CayenneModeler MCP: open_project tool
CAY-2945 CayenneModeler universal "main"
CAY-2946 Claude Code "plugin" for agentic coding with Cayenne
CAY-2947 Merge "cayenne-commitlog" into the core
CAY-2948 Modeler: use native FileDialog on Mac
CAY-2953 Upgrade Gradle to 9.4.0
CAY-2955 Get rid of QueryEngine abstraction

Bug Fixes:

CAY-2701 MySQL DST-related LocalDateTime issues
CAY-2836 ObjectSelect.selectCount() throws if a query contains ordering
CAY-2860 Translate (not)in expression with empty values
CAY-2863 DbEntity qualifiers are no longer applied to JOIN conditions
CAY-2871 QualifierTranslator breaks on a relationship with a compound FK
CAY-2872 CayenneModeler "Documentation" link is broken
CAY-2876 Memory leak in the ObjectStore
CAY-2879 Negative number for non parameterized ObjectSelect query not processed correctly
CAY-2883 License and notice templates are not processed by the Gradle build
CAY-2885 Modeler: DbImport fails to load DB schema view
CAY-2887 Expressions: Incorrect serialization to string of numeric literals
CAY-2889 Make subclassing a PK Generator easier
CAY-2891 Expressions: incorrect SQL translation of the ASTNegate node with scalar argument
CAY-2895 Incorrect Lazy Pagination Comparison for BigInteger PK
CAY-2896 Inserting two identical objects into two datamaps stores both objects in the last used datamap
CAY-2898 Crypto: NPE in a ColumnQuery
CAY-2899 CommitLog: missing lifecycle-induced changes in `excludeFromTransaction` mode
CAY-2900 Meaningful generated PKs could lead to the ClassCastException
CAY-2901 Loosing comments on the existing ObjAttribute after DB import
CAY-2902 Shared query cache clobbers newer object state
CAY-2904 Disjoint prefetch returns incorrect data
CAY-2914 Modeler: DB Import "Table Types" filter change does not refresh the schema tree
CAY-2919 Exception in "Generate Database Schema"
CAY-2921 Modeler: consistent duplicate name handling
CAY-2926 Modeler: renaming an ObjEntity adds it to cgen excludeEntities
CAY-2931 Modeler: default encoding detected as UTF8, should be UTF-8
CAY-2934 Modeler: dropdown data trunction
CAY-2944 MergerTokenFactoryProvider does not resolve adapter subclasses
CAY-2951 Newly reverse-engineered entities are excluded from CGen
CAY-2952 Unstable project extension ordering

----------------------------------
Release: 5.0-M1
Date: Aug 28, 2024
----------------------------------
Changes/New Features:

CAY-2378 Switch usage of SelectQuery to ObjectSelect internally
CAY-2498 Rename packages to prevent crossing package names
CAY-2597 case-when implementation
CAY-2715 Support ANY and ALL expressions for subqueries
CAY-2737 Cayenne 5.0: cleanup deprecated code
CAY-2741 Cleanup TransactionDescriptor and deprecate DefaultTransactionDescriptor
CAY-2742 Switch minimum required Java version to 11
CAY-2744 Remove ROP support
CAY-2746 Cleanup root pom.xml
CAY-2747 Update project XML version to 11
CAY-2751 Simplify DataNode configuration
CAY-2752 Rename queryTemplate to dataMapTemplate in the cgen config
CAY-2753 Remove VPP support in the ant task
CAY-2754 Add SELF property to the cgen templates
CAY-2756 Modeler: simplify cgen UI
CAY-2757 Modeler: Create custom templates from defaults
CAY-2758 Refactoring code for a extended TemplateType class
CAY-2759 Add utility methods to the SELF property
CAY-2760 ObjectContext.userProperties need a way to clear properties
CAY-2761 Modeler: Editor for the cgen templates
CAY-2766 Modeler: Improving the work with velocity templates for class generation
CAY-2767 Modeler: upgrade deprecated code in custom components
CAY-2771 Switch to GitHub actions
CAY-2773 Switch master to "5.0"
CAY-2776 Upgrade Gradle to 7.6
CAY-2780 Modeler: Multiple configurations for classes generation
CAY-2781 Enable 'Create PK properties' by default in the cgen configuration
CAY-2784 Remove 'Use Java primitive types' option from dbimport
CAY-2785 Modeler: improve folder selection for cgen
CAY-2787 Modeler: Ability to sort DB Import rules
CAY-2788 DbImport: Add fallback option for the batch attribute loader
CAY-2795 Add unit tests for the Json type
CAY-2802 Upgrade Gradle to 7.6.1
CAY-2803 Test infrastructure: declarative custom DI modules in ServerCase
CAY-2805 Stop calling exp parser internally
CAY-2807 EntityProperty.inId(..) / ninId(..) - disambiguate method parameters
CAY-2814 Select query iterator() and batchIterator() methods return incorrect results
CAY-2816 (NOT) EXIST usability - provide simple expression syntax
CAY-2817 Pagination flow refactoring
CAY-2818 JDK 21 support
CAY-2819 DataContext.performIteratedQuery() method should be unified with iterator() method
CAY-2820 Remove `server` from the components naming
CAY-2821 Change development versioning schema
CAY-2822 Rename `cayenne-server` module to `cayenne`
CAY-2823 Merge `ServerRuntime` back to `CayenneRuntime` and deprecate it
CAY-2824 Rename CayenneServerModuleProvider to CayenneRuntimeModuleProvider
CAY-2825 Rename package `o.a.c.configuration.server` to `o.a.c.configuration.runtime`
CAY-2826 Rename `ServerModule` to `CoreModule`
CAY-2828 Rename values in `org.apache.cayenne.configuration.Constants`
CAY-2829 Merge `BaseContext` with `DataContext` and deprecate it
CAY-2830 Cleanup `DataContext` code
CAY-2831 Upgrade Gradle to 8.5
CAY-2833 Unify code related to the Cayenne model paths processing
CAY-2834 v11 upgrade handler should update XMLPoolingDataSourceFactory package
CAY-2835 Custom aggregate functions
CAY-2837 Deprecate TraversalHelper and move no-op implementations to TraversalHandler
CAY-2843 Use an IN clause for single field disjoint by ID prefetches
CAY-2845 Deprecate DataObject in favour of Persistent
CAY-2846 Modeler: Allow to disable some validation rules in the project
CAY-2849 Switch documentation to `hugo-asciidoctorj-extension`
CAY-2856 Upgrade Gradle to 8.8
CAY-2857 Java 22 support
CAY-2858 Redesign Collection and Map Property API
CAY-2862 Cleanup and upgrade Maven plugins dependencies
CAY-2865 Upgrade test dependencies
CAY-2867 Tweak GraphBasedDbRowOpSorter logic to allow related updates
CAY-2870 Modeler: Upgrade CayenneDataObject to GenericPersistentObject

Bug Fixes:

CAY-2552 ColumnQuery with flattened attributes bug
CAY-2621 Modeler: project is dirty after a no-change db import
CAY-2667 Fix Issues with Generic Vertical Inheritance
CAY-2732 Exception when creating ObjEntity from a DbEntity
CAY-2748 Mutating the list returned from the local query cache changes the cache
CAY-2755 Modeler: Entities are not sorted by name in the class generation view
CAY-2762 Modeler: Difference in toolbars colors on OSX
CAY-2763 Split expressions do not work with flattened relationships
CAY-2764 Split expressions do not work with DB relationships
CAY-2765 dbimport: check excluded catalogs and schemas for the SQLServer
CAY-2769 Modeler: 'rootPath' attribute is missing
CAY-2772 Bootique-style module "extenders" for smoother configuration
CAY-2774 Overriding service ordering in DI List causes DIRuntimeException
CAY-2777 Reverse relationship is not set with single table inheritance
CAY-2782 Modeler: save button becomes active on DataMap comment field focus
CAY-2783 DbEntity to ObjEntity synchronization should check mandatory flag for primitive java types
CAY-2786 Modeler: field outputDir work incorrect
CAY-2789 MalformedJsonException thrown when reading manually edited JSON data in Postgres
CAY-2790 EOModel import: NPE importing EOFetchSpecification
CAY-2792 Fix Insertion Order For Reflexive DataObjects
CAY-2794 Fix Incorrect JavaType for Vertical-Inheritance Attributes
CAY-2796 Cayenne custom json formatter produces invalid json
CAY-2800 Modeler saves map.xml files with schema ordering error
CAY-2801 Incorrect equals() implementation in IdGenerationMarker could cause data missing in the commit
CAY-2804 LocalTimeValueType potential loss of precision
CAY-2806 Incorrect processing of unicode escape syntax in JSON
CAY-2809 Cayenne Expression grammar doesn't allow custom function as an argument for string functions
CAY-2810 Can't use custom operator expression with aggregate functions
CAY-2811 Incorrect SQL building using ColumnQuery with ASTScalar
CAY-2813 Regression: Constants.CI_PROPERTY flag is no longer working for MySQL
CAY-2815 Incorrect translation of aliased expression
CAY-2827 Saved data-source XML data doesn't correspond to the XSD schema
CAY-2838 Vertical Inheritance: Problem setting db attribute to null via flattened path
CAY-2840 Vertical Inheritance: Missing subclass attributes with joint prefetch
CAY-2841 Multi column ColumnSelect with SHARED_CACHE fails after 1st select
CAY-2844 Joint prefetch doesn't use ObjEntity qualifier
CAY-2842 Prevent duplicate select columns when using distinct with order by
CAY-2847 Improve duplicate select column detection when using order by
CAY-2848 Vertical Inheritance: Updating one-to-many with inverse nullifies other columns
CAY-2850 Query using Clob comparison with empty String fails
CAY-2851 Replace Existing OneToOne From New Object
CAY-2853 Incorrect deletion of entities from flattened attributes
CAY-2854 Improve delete prevention detection of flattened attribute row
CAY-2866 DefaultDataDomainFlushAction breaks on circular relationship update
CAY-2868 Regression: DefaultDbRowOpSorter shouldn't sort update operations
CAY-2869 Upgrade handler v11 removes db import configuration
