Cayenne 3 is advancing quickly. This latest milestone also fixes a range of bugs and is recommended for all users of previous Cayenne 3 milestones. As before, Cayenne 2.x should still be used in preference if you want a stable API with a proven track record.
Some of the exciting changes in this milestone of Cayenne include support for outer joins and split expressions, better performance in ROP by sometimes hugely reducing network traffic (CAY-971) and by having the server return lifecycle objects changes to the client automatically, improvements to the modeler, and improving the ability of a paginated list to support many hundreds of thousands of records with efficient use of memory. Of course there is much more besides, so please browse the Jira issues below which interest you. There are very few changes to generics this time, so it should be fairly simple to drop the new jar into your application.
All feedback, bug reports or feature requests are welcome and there is still time for new features to be added before 3.0 final release. We encourage you to test it in your application and report back any issues you might have so they can be addressed. Upgrade notes can be found here
Changes/New Features Since M3:
- CAY-514 implement a "MATCH ALL VALUES" expression
- CAY-560 Add support for outer joins
- CAY-789 return object diff to client in ROP after commit
- CAY-802 Split Expressions
- CAY-809 Support for explicit mapping of SQL results with SQLResultSetMapping
- CAY-839 Support combination of Persistent objects and scalars in query results
- CAY-868 Deprecate EventManager.getDefaultManager() and stop using it
- CAY-893 CM Usability: Reopen Last Project on Startup
- CAY-929 SelectTranslator support for standard SQL join syntax, including outer joins
- CAY-970 Allow application to add DbAdapterFactory to AutoAdapter
- CAY-971 ROP GraphDiff "compressor"
- CAY-980 Upgrade Derby to 10.3 to support alter table drop column
- CAY-994 Add extended enumeration support
- CAY-999 Scaling paginated list
- CAY-1006 Upgrade Hessian to 3.1.5
- CAY-1010 Entity Tab switching on new entity creation
- CAY-1011 Add confirmation dialog for delete actions
- CAY-1019 Streamlining LOCAL_CACHE handling
- CAY-1024 Add .zip generation to Windows profile.
- CAY-1026 Drop commons-lang dependency
- CAY-1027 Orderly EventManager shutdown
- CAY-1033 remove completed merge tokens from view in cayenne modeler
- CAY-1035 Replace QueryMetadata String cache policies with an enum
- CAY-1038 Upgrade to Ashwood 2.0
- CAY-1046 Make PK metadata available via Obj* API.
- CAY-1048 Deprecate but preserve functionality of QueryMetadata.isRefreshingObjects()
- CAY-1049 Refactor QueryAssembler/SelectTranslator
- CAY-1050 MySQLSniffer should configure created adapter to use MySQL default engine for tables
- CAY-1051 Oracle 11 driver support - Drop OracleAdapter "optimizations"
Bug fixes since M3:
- CAY-574 DataObjectUtils 'objectForPK' should work on the client
- CAY-732 Incorrect query with self joins
- CAY-785 Cayenne Modeler Fails to Open Project
- CAY-982 Client class and superclass names not auto-populated for new ObjEntity.
- CAY-983 POST_LOAD called twice
- CAY-984 Runtime relationships leak into CayenneModeler
- CAY-986 LOCAL_CACHE policy fails when query is paged
- CAY-989 Garbage SQL generated for EJBQL subqueries
- CAY-992 Modeler does not escape entity names
- CAY-998 ROP paginated lists must recover from server LRU query cache overflow
- CAY-1003 the paged queries in ROP can fail to fetch the subsequent pages if the client and server are in different timezones
- CAY-1005 CM Qualifier (or Declared Qualifier) is not honoured in 100% cases
- CAY-1014 Enums as meaningful PK
- CAY-1018 Enums fetched via SQLTemplate
- CAY-1020 Problem accessing toMany Set relationships on client.
- CAY-1028 NPE's in the Modeler for incomplete relationships
- CAY-1043 NPE in ConnectionWrapper on rollback
- CAY-1044 NPE on commit when the new object was deleted before commit
- CAY-1053 MapQueryCache.CacheEntry not serializable
- CAY-1054 Error removing object from a paginated list after the object was deleted and the context committed