3.1
2011-11-10
- Requires Appengine SDK 1.6.0 or newer
Please read the release notes for 3.1 beta 1. In addition:
- Always enables XG when starting a transaction on HRD
- Memcache integration now uses SDK 1.6.0 batch CAS operations for efficiency
- Added ObjectifyFactory.allocateIdRange()
- Changed Key<?>.toWebSafeString() (introduced in 3.1b1) to getString()
- Added a Key<?> constructor (and create() method) that takes a web safe string (ie getString())
- Added optional converters for joda time and money classes
- Added a varargs overload of Objectify.get(Key...)
3.1 beta 1
2011-10-13
- Requires Appengine SDK 1.5.5 or newer
Note: The big change in 3.1 is that the memcache integration has been rewritten from scratch. On the plus side, the new cache will not go out of sync with the datastore, even under severe contention. On the down side, batch fetches are prohibitively slow. This will be resolved in a future version by the addition of batch CAS operations to the GAE SDK.
- Added API for XG transactions
- Completely rewritten cache code
- Added Key<?>.toWebSafeString() and a constructor to reconstitute the Key<?>
- Added ObjectifyFactory.allocateId() convenience method
- Several internal API changes.
3.0.1
2011-09-08
- Requires Appengine SDK 1.4.0 or newer
- Added methods Query.chunkSize() and Query.prefetchSize()
- Experimental support for @Embedded Maps
- Added a TimeZoneConverter so you can have TimeZone fields
- Added a BigDecimalLongConverter which is not enabled by default
3.0
2011-04-22
- Requires Appengine SDK 1.4.0 or newer
IMPORTANT! Read the release notes for beta1 and beta2, in particular the note about breaking Key<?> serialization. If you have serialized Key<?> objects into persistent stores, this will affect you. Also, you will not be able to construct Key<?> objects from client-side GWT.
- Fixed NPE when fetching polymorphic entities not in the database.
- Fixed NPE when fetching collection field with raw type (missing generics).
3.0 beta 2
2011-04-04
- Requires Appengine SDK 1.4.0 or newer
- Implemented Polymorphic persistence
- Key<?> implementation changed - this WILL BREAK KEY SERIALIZATION. If you have serialized keys in a persistent structure, read the discussion of this issue on the mailing list. This only affects Key<?> in @Serialized fields; simple Key<?> properties and @Embedded Key<?>s are fine.
- Fields now receive their @Indexed/@Unindexed default state from the class they are declared on rather than the final class in the inheritance hierarchy. This is a potential breaking change, although previous behavior was undocumented.
- Added a Query.fetch() method to produce an async Iterable
- Better error message if you try to register a nonstatic inner class
- Loading embedded collections with a null value for the property itself no longer throws an exception.
- Added IfEmpty and IfNotEmpty conditions
- A number of internal APIs changed to support polymorphism.
3.0 beta 1
2011-02-28
- Requires Appengine SDK 1.4.0 or newer
- Implemented asynchronous operations on AsyncObjectify
- Breaking change: Moved all classes in com.googlecode.objectify.helper to com.googlecode.objectify.util, including DAOBase
- Significant internal changes to support async API.
2.2.3
2010-12-13
- Requires Appengine SDK 1.4.0 or newer
- Added pluggable system for managing type conversions
- Unwraps InvocationTargetExceptions in lifecycle callbacks
- Made ObjectifyOpts.clone() public
- Fixed bug when filtering by enums
- Added a "Monotonic" helper class
2.2.2
2010-10-21
- Requires Appengine SDK 1.3.8 or newer
- Deprecated Query.countAll(), added Query.count() method which behaves better.
- Deprecated Query.cursor(); added Query.startCursor() and Query.endCursor().
- Added Query.clone()
- Allows null @Parent keys.
- Now handles java.sql.Date
- Ignores synthetic fields (should make Groovy happier)
- Now respects @Indexed/@Unindexed on entity base classes.
- Added overrideable createDefaultOpts() method to ObjectifyFactory. Added clone() method to ObjectifyOpts.
- @Id and @Parent fields are now included when you embed an entity in another entity.
- Fixed a bug related to fields whose type base class name overlapped with entity names (eg, User)
2.2.1
2010-06-01
- Requires Appengine SDK 1.3.2 or newer
- Added typesafe ObjectifyFactory.allocateIds() methods.
- Enums are persisted using the .name() method rather than .toString()
- Added varargs versions of Objectify.put() and Objectify.get()
- DAOBase now lets you use ObjectifyOpts
2.2
2010-04-22
- Requires Appengine SDK 1.3.2 or newer
- Added ObjectifyOpts parameter to begin()
- Added optional session cache
- Fixed automatic byte to Blob conversion
- Added Query.list() and Query.listKeys() methods
- Fixed filtering with IN operator on key and id columns
- Lifecycle callbacks (@PostLoad and @PrePersist) can now take Objectify and/or Entity parameters
- Removed the datastore retry mechanism - this is now built into the appengine SDK.
2.1
2010-03-25
- Requires Appengine SDK 1.3.1 or newer
- Changed return type of Objectify.get(Class<? extends T> clazz, Iterable<S> idsOrNames) to Map<S, T> rather than Map<Key<T>, T>. This is a breaking change
- Added support for partial index conditions to @Indexed and @Unindexed
- Added @NotSaved (with conditions)
- Added @AlsoLoad as replacement for @OldName
- Deprecated @OldName
- Added Objectify.getFactory() method
- Added wrapper helper classes for Objectify, Query, and QueryResultIterator
2.0.2
2010-02-25
- Requires Appengine SDK 1.3.1 or newer
- Added @Unindexed and @Indexed class and field support
- Fixed bugs in query Cursor and limit() support.
2.0.1
2010-02-18
- Requires Appengine SDK 1.3.1 or newer
- Added Cursor support
- Added @PostLoad and @PrePersist callbacks
2.0
2010-02-10
- Requires Appengine SDK 1.3.0 or newer
- See 2.0rc1 and 2.0b1 release notes for significant changes since 1.0.3.
- Changed ObjectifyFactory.createKey() to slightly-different ObjectifyFactory.getKey() and removed createKey() from ObjectifyService.
2.0 rc 1
2010-02-09
- Requires Appengine SDK 1.3.0 or newer
- Adds memcache integration (write-through, transaction safe, negative caching, custom class expiration) with a @Cached annotation.
2.0 beta 1
2010-02-07
- Requires Appengine SDK 1.3.0 or newer
- Completely new Query API.
- OKey<?> has been renamed to Key<?>
- Added @Embedded classes, collections, and arrays
- Added GWT versions of all basic datastore types (Email, Link, GeoPt, etc)
- Fields using the transient keyword will now be persisted. The @Transient annotation is now the only way to tell Objectify to ignore a field.
- New architecture and many more unit tests!
1.0.3
2010-01-29
- Requires Appengine SDK 1.3.0 or newer
- Fixed a bug in batch delete.
1.0.2
2010-01-26
- Requires Appengine SDK 1.3.0 or newer
- Entity superclasses now processed correctly.
- OKey now serializes properly in GWT.
- Fixed classloader exception when using FetchOptions with datastore retries.
- Better error msg if entity missing no-args constructor.
1.0.1
2010-01-22
- Requires Appengine SDK 1.3.0 or newer
- Added support for Enum types
- Fixed OPreparedQuery.asSingle() when resultset was empty
- Added full support for the common collection types
1.0
2010-01-13
- Requires Appengine SDK 1.3.0 or newer