...
Feature | EOF | Cayenne | Notes |
---|---|---|---|
Open Source |
| X | |
Still Developed / Maintained |
| X | WebObjects/EOF has been given legacy status by Apple. |
Development on any Platform |
| X | WebObjects/EOF may only be developed on Apple hardware. |
Eclipse Integration | X | * | Cayenne Eclipse integration is being developed and an alpha version is available. |
Good Concurrency Support |
| X | EOF is single threaded and requires explicit locking, preventing concurrent operations. |
Support for all common DBs | X | X |
|
Primitive Attributes |
| X |
|
Enum Attributes | X* | X | Enum attributes are supported in EOF via the javaEnum prototype in Wonder. |
Relationships with Map or Set collection types |
| X |
|
Custom Attribute Types | * | X | The ERAttributeExtension framework in Wonder can provide this support for EOF. |
Embeddable relationships | * | X | EOF allows mapping relationships to the same table as the parent and using the same entity class. Cayenne allows embedding objects of a different class as de-normalized relationships in a single column. |
Single Table Inheritance | X | X |
|
Horizontal Inheritance | X | * | Horizontal inheritance is being developed and targeted for the next release of Cayenne (3.1) |
Vertical Inheritance | X | * | Cayenne's vertical inheritance support is not yet complete |
Flattened attributes/relationships | X | X |
|
Automatic Bi-directional Relationship Management | X* | X | EOF support is optionally provided by Wonder. |
Generics support (Java 5) |
|
| Generics support is mostly artificial in both EOF and Cayenne (implemented by casting in entity template). |
Support Transient Objects | X | * | Cayenne supports Transient object manipulation for attributes, but not relationships. |
Support for Generic Objects (no custom classes) | X | X |
|
Optimistic Locking | X | X |
|
Optional Editing Context Synchronization |
| X | EOF automatically synchronizes editing contexts which can hide Optimistic Locking problems. |
Key Value Coding | X |
| Cayenne has some utility methods to access bean properties, and support for raw data access like storedValueForKey provides for EOF, but no direct analog to KVC. |
Customizable entity templates | X | X |
|
Raw fetching (Raw Rows / Data Rows) | X | X* | Cayenne's raw fetching is limited to fetching attributes, not relationships (see here), but other lower level support is available without resorting to raw SQL. |
Direct SQL support | X | X |
|
Nested Editing Contexts | X | X |
|
Editing Context Undo | X |
|
|
Remote / Distributed Data Access (Client apps) using API directly | X | X |
|
Android Support |
| * | Android support is available with a patch to Cayenne. EOF will run on Android, but the license does not allow it. |
Pluggable Cache Implementation |
| X |
|
Database Migrations | X | * | Migrations are available in Cayenne with a pending project in the sandbox and an open issue (vote it up!). CayenneModeler has the ability to inspect schema and migrate it as an one-time Admin function; this could be extended to generate a migration upgrade classes in additional to the initial migration. |
EJBQL Query support (defined by JPA spec) |
| X |
|
Raw SQL Templating |
| X | Cayenne allows SQL to be written using the velocity template language and stored in the model so it can support multiple database types. |
Batch Querying |
| X | Cayenne provides this using QueryChain |
Documentation in the model (EO model doc) | X |
|
|
Default values defined in the model (for migrations and in entity objects) | X |
|
|
Servlet Deployment | X | X |
|
JavaMonitor / wotaskd Deployment | X | X |
|
Incredible Community and Conferences | X |
|
|
...