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-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
