Spring Data Commons Changelog ============================= Changes in version 1.5.3.RELEASE (2013-09-30) --------------------------------------------- ** Bug * [DATACMNS-360] - Unable to use @Profile annotation on scanned repository interfaces * [DATACMNS-362] - Potential concurrency issues in Repositories ** Task * [DATACMNS-371] - Release 1.5.3. Changes in version 1.5.2.RELEASE (2013-07-19) --------------------------------------------- ** Bug * [DATACMNS-320] - Mapping ambiguation detection is too aggressive * [DATACMNS-323] - PageImpl.getTotalPages() possibly returns incorrect result when PageImpl is instantiated with simple constructor * [DATACMNS-326] - RepositoryInterfaceAwareBeanFactoryPostProcessor should implement PriorityOrdered * [DATACMNS-327] - AbstractMappingContext has to init domain classes in afterPropertiesSet() * [DATACMNS-345] - AbstractMappingContext doesn't consider the actual type of property of a generic collection type. ** Improvement * [DATACMNS-324] - Open up OSGi manifest for Spring 4 * [DATACMNS-325] - Open up lower boundary of Slf4j in manifest * [DATACMNS-328] - Typo in field name of PageableArgumentResolver * [DATACMNS-329] - Add integration test to guard against potential regressions for SPR-10517 ** Task * [DATACMNS-332] - Performance improvements in conversion system hotspots * [DATACMNS-347] - Release 1.5.2 Changes in version 1.5.1.RELEASE (2013-04-16) --------------------------------------------- ** Bug * [DATACMNS-283] - Improve exception message for failed instantiations in ReflectionEntityInstatiator * [DATACMNS-285] - Spring Data Commons Maven artifactId seems outdated on springsource.org * [DATACMNS-300] - ReflectionEntityInstantiator should actually throw created exception * [DATACMNS-306] - RepositoryBeanDefinitionBuilder does not populate the source of created BeanDefinitions * [DATACMNS-309] - TypeDiscoverer does not correctly resolve nested property path expressions ** Improvement * [DATACMNS-282] - Improve caching in AnnotationBasedPersistentProperty * [DATACMNS-284] - As a user I'd like to use Spring Data Commons without changes in Virgo 3.6.0.RELEASE * [DATACMNS-287] - Polish JavaDoc * [DATACMNS-288] - Upgrade to Spring Data Build 1.0.2.RELEASE * [DATACMNS-289] - Upgrade to Spring Data Build 1.0.2.RELEASE * [DATACMNS-305] - Add toString() methods to PersistentProperty implementations ** New Feature * [DATACMNS-311] - TypeDiscoverer fails to resolve properties expressed through read methods in supertypes ** Task * [DATACMNS-312] - Release 1.5.1 Changes in version 1.5.0.RELEASE (2013-02-07) --------------------------------------------- ** Bug * [DATACMNS-227] - ResourceReaderRepositoryPopulatorBeanDefinitionParser should parse location attribute not locations * [DATACMNS-257] - PropertyPath cannot deal with all uppercase fields * [DATACMNS-260] - Separate SpEL expression evaluation from PersistentEntity parameter value lookup * [DATACMNS-263] - CDI integration with openEJB fails * [DATACMNS-264] - Javadoc of org.springframework.data.web.PageableDefaults links to invalid classes * [DATACMNS-271] - AnnotationBasedPersistentProperty should cache annotation lookups * [DATACMNS-276] - ParameterizedTypeInformation is missing hashCode() method ** Improvement * [DATACMNS-168] - Allow customizing the bean name for repository beans * [DATACMNS-246] - misleading JavaDoc suggests that result pages are 0-based (but they are 1 based) * [DATACMNS-248] - Move to Slf4j API for logging * [DATACMNS-253] - IndexOutOfBoundsException in Repository proxy when missing parameters * [DATACMNS-254] - Auditable's identifier type constrained to the the same type as Persistable's * [DATACMNS-255] - Make TypeFilterParser public * [DATACMNS-269] - Add support for mapping annotations on accessor methods * [DATACMNS-274] - Fix package cycle in mapping subsystem * [DATACMNS-275] - UserCredentials should provide method to get obfuscated password * [DATACMNS-278] - Add Converter implementations for JodaTime types ** New Feature * [DATACMNS-251] - Introduce API to determine is-new state of entities. * [DATACMNS-256] - Expose PersistentEntity on Repositories wrapper object ** Task * [DATACMNS-258] - Copy edit reference documentation * [DATACMNS-265] - Polish JavaDoc * [DATACMNS-266] - Use new Maven build setup * [DATACMNS-270] - Fix merge testing test case in Cross Store module * [DATACMNS-273] - Upgrade to Spring HATEOAS 0.4 * [DATACMNS-277] - Document new auditing features * [DATACMNS-279] - Release 1.5.0 Changes in version 1.4.1.RELEASE (2013-02-07) --------------------------------------------- ** Bug * [DATACMNS-257] - PropertyPath cannot deal with all uppercase fields * [DATACMNS-276] - ParameterizedTypeInformation is missing hashCode() method ** Improvement * [DATACMNS-168] - Allow customizing the bean name for repository beans * [DATACMNS-253] - IndexOutOfBoundsException in Repository proxy when missing parameters * [DATACMNS-254] - Auditable's identifier type constrained to the the same type as Persistable's ** Task * [DATACMNS-280] - Release 1.4.1 Changes in version 1.4.0.RELEASE (2012-10-09) --------------------------------------------- ** Bug * [DATACMNS-176] - StackOverflowError when inserted object is a CGLIB proxy * [DATACMNS-221] - Parsing of method names with non-ascii characters fails in some cases * [DATACMNS-226] - ConfigurableTypeInformationMapper caches too aggressively * [DATACMNS-228] - Mapping sub-system should exclude Groovy introduced properties from persistent properties * [DATACMNS-233] - DomainClassConverter should gracefully return null for null sources or empty strings * [DATACMNS-235] - Enforce ordering of bean creation when using custom repository implementations ** Improvement * [DATACMNS-146] - Ability to specify default sort on @PageableDefaults * [DATACMNS-220] - In query method names not containing "By" get/find/read prefixes are not stripped * [DATACMNS-222] - AbstractRepositoryPopulatorFactoryBean javdoc is incorrect * [DATACMNS-223] - RepositoryPopulator should log each resource that it processes * [DATACMNS-224] - As a developer, I want an application event to be emitted when RepositoryPopulator finishes * [DATACMNS-229] - RepositoryInterfaceAwareBeanPostProcessor should use ConfigurableListableBeanFactory#getBeanClassLoader in #getClassForPropertyValue * [DATACMNS-230] - Clarify usage of Sort in special parameter handling section of the reference documentation * [DATACMNS-231] - Polish Sort implementation and JavaDoc * [DATACMNS-242] - Improve exception message in error cases of QueryMethod ** Task * [DATACMNS-192] - Release 1.4 GA * [DATACMNS-207] - Remove deprecated method from PersistentProperty * [DATACMNS-225] - Update Querydsl Maven plugin to 1.0.4 * [DATACMNS-240] - Upgrade to Querydsl 2.8.0 * [DATACMNS-241] - Upgrade to Spring HATEOAS 0.3.0.RELEASE Changes in version 1.4.0.RC1 (2012-08-23) ----------------------------------------- ** Bug * [DATACMNS-205] - Reference docs build broken ** Improvement * [DATACMNS-209] - MappingContextEvent should provide info about which MappingContext it originated from. * [DATACMNS-210] - Documentation references repository element which is no longer valid * [DATACMNS-211] - Extend TypeInformation abstraction * [DATACMNS-212] - Sonargraph checks * [DATACMNS-214] - AbstractMappingContext.getPersistentEntity(…) should return null for simple types * [DATACMNS-215] - Remove EntityValidators from MappingContext API * [DATACMNS-218] - Make metadata access possible in org.springframework.data.history.Revision * [DATACMNS-219] - Make Spring 3.1.2.RELEASE default Spring dependency version ** Task * [DATACMNS-213] - List all compile time dependencies explicitly * [DATACMNS-216] - Remove deprecations from AbstractMappingContext * [DATACMNS-217] - Release 1.4 RC1 Changes in version 1.4.0.M1 (2012-07-23) ---------------------------------------- ** Bug * [DATACMNS-178] - Invalid compile time dependency on JUnit * [DATACMNS-180] - Java transient fields should not be considered transient for persistence ** Defect * [DATACMNS-189] - Typo in section 1.2 ** Improvement * [DATACMNS-72] - Approach Sonar results to improve code quality * [DATACMNS-164] - Allow pagination value objects to be used by marshaling infrastructure like JAXB or JSON * [DATACMNS-172] - PropertyPath should throw more meaningful exception if properties cannot be found * [DATACMNS-174] - Part.Type should expose keywords supported * [DATACMNS-177] - Fix OSGi bundle identifier * [DATACMNS-179] - MappingContext initialEntitySet should get added after the ApplicationContext is completely set up * [DATACMNS-185] - Expose initialization of AbstractMappingContext through method * [DATACMNS-186] - BasicPersistentEntity should reject multiple id properties * [DATACMNS-187] - Let the Revision class in the history package also expose the revision date * [DATACMNS-193] - Would rather not use Iterable on query methods metadata ** New Feature * [DATACMNS-47] - Support Java-based Configuration of Repositories * [DATACMNS-58] - As a developer I want to be able to initialize a repository with data () ** Task * [DATACMNS-173] - Upgrade Maven compiler and surefire plugins * [DATACMNS-175] - JavaDoc should be built before assembly * [DATACMNS-188] - AbstractMappingContext.getComponentTypeRecursively(…) is obsolete and should be removed * [DATACMNS-191] - Release 1.4.0 M1 * [DATACMNS-201] - Fix critical warnings in Sonar * [DATACMNS-202] - Move common helpers for BeanDefinitionParsers from Mongo module into Commons * [DATACMNS-203] - Re-enable accidentally disabled unit tests Changes in version 1.3.2.RELEASE (2012-07-23) --------------------------------------------- ** Improvement * [DATACMNS-185] - Expose initialization of AbstractMappingContext through method * [DATACMNS-186] - BasicPersistentEntity should reject multiple id properties * [DATACMNS-187] - Let the Revision class in the history package also expose the revision date ** Task * [DATACMNS-188] - AbstractMappingContext.getComponentTypeRecursively(…) is obsolete and should be removed * [DATACMNS-204] - Release 1.3.2 Changes in version 1.3.1.RELEASE (2012-06-18) --------------------------------------------- ** Bug * [DATACMNS-178] - Invalid compile time dependency on JUnit * [DATACMNS-180] - Java transient fields should not be considered transient for persistence ** Improvement * [DATACMNS-172] - PropertyPath should throw more meaningful exception if properties cannot be found * [DATACMNS-174] - Part.Type should expose keywords supported * [DATACMNS-177] - Fix OSGi bundle identifier * [DATACMNS-179] - MappingContext initialEntitySet should get added after the ApplicationContext is completely set up ** Task * [DATACMNS-173] - Upgrade Maven compiler and surefire plugins * [DATACMNS-175] - JavaDoc should be built before assembly * [DATACMNS-184] - Release 1.3.1 Changes in version 1.3.0.RELEASE (2012-05-16) --------------------------------------------- ** Bug * [DATACMNS-170] - Potential NullPointerException in ReflectionEntityInformation ** Improvement * [DATACMNS-171] - QueryMethod should expose whether the method will be returning an entity ** Task * [DATACMNS-149] - Release 1.3.0 Final * [DATACMNS-162] - Briefly document CDI integration for repositories Changes in version 1.3.0.RC2 (2012-05-02) ----------------------------------------- ** Bug * [DATACMNS-153] - OSGi issue when using a Repository that extends QueryDslPredicateExecutor (Spring Data + QueryDsl * [DATACMNS-154] - Overwriting of delete(T entity) saveAndFlush(T entity); does not work anymore * [DATACMNS-157] - @Query in extending interface is not picked up correctly * [DATACMNS-160] - Regression of Repository instances with only delete* methods ** Improvement * [DATACMNS-159] - Example 1.16. Custom repository factory bean is outdated * [DATACMNS-167] - TypeDiscoverer should not consider types implementing Iterable<…> collection like ** Refactoring * [DATACMNS-143] - Remove deprecations in MappingContextEvent * [DATACMNS-166] - Improve API of Repositories / RepositoryFactoryInformation ** Task * [DATACMNS-156] - Remove deprecated persistence package * [DATACMNS-161] - Upgrade to Querydsl 2.5.0 * [DATACMNS-165] - Release 1.3.0.RC2 Changes in version 1.3.0.RC1 (2012-04-16) ----------------------------------------- ** Bug * [DATACMNS-120] - PreferredConstructor.Parameter does not have equals(...) and hashCode() methods * [DATACMNS-132] - NullPointerException AbstractPersistentProperty inside isEntity * [DATACMNS-133] - Documented Configuration of Conversion Service with DomainClassConverter Does Not Work * [DATACMNS-139] - StackOverflowError from infinite recursion in PropertyPath.create:326 * [DATACMNS-150] - Repository lookup in DomainClassConverter and DomainClassPropertyEditorRegistrar throws ClassCastException if not all repositories implement CrudRepository ** Improvement * [DATACMNS-111] - Add dynamic finder keywords StartingWith, EndingWith & Containing * [DATACMNS-134] - EntityInstantiator should be capable of instantiating member classes * [DATACMNS-141] - Add Before and After as keywords for query derivation * [DATACMNS-142] - Improve API of UserCredentials * [DATACMNS-151] - Improve generics in CrudRepository.save(…) * [DATACMNS-152] - Improve API in mapping subsystem ** New Feature * [DATACMNS-135] - Add basic infrastructure for versioning stores ** Task * [DATACMNS-144] - Polish reference documentation for repositories * [DATACMNS-145] - Add general list of supported keywords to reference documentation * [DATACMNS-148] - Release 1.3.0.RC1 Changes in version 1.3.0.M1 (2012-02-03) ---------------------------------------- ** Bug * [DATACMNS-125] - QueryExecutorMethodInterceptor does not reject interfaces with query methods if no QueryLookupStrategy defined ** Improvement * [DATACMNS-119] - Make org.springframework.data.domain.Sort$Order implement Serializable * [DATACMNS-122] - Improve entity instantiation API * [DATACMNS-123] - Deprecate types in persistence package * [DATACMNS-128] - ParameterAccessor should allow to determine if parameter values contain null value * [DATACMNS-129] - Add CrudRepository.findAll(Iterable ids) ** New Feature * [DATACMNS-127] - Add helper to ease implementation of delegating EntityInformations ** Refactoring * [DATACMNS-74] - Consolidate entity instantiation strategies Changes in version 1.2.1 (2012-02-03) ------------------------------------- * [DATACMNS-125] - QueryExecutorMethodInterceptor does not reject interfaces with query methods if no QueryLookupStrategy defined * [DATACMNS-119] - Make org.springframework.data.domain.Sort$Order implement Serializable Changes in version 1.2.0.RELEASE (2011-12-22) --------------------------------------------- ** Bug * [DATACMNS-109] - Upgrade to latest Querydsl * [DATACMNS-114] - Wrong custom implementation automatically detected ** Improvement * [DATACMNS-112] - Upgrade to latest Querydsl * [DATACMNS-116] - Synchronisation during performance tests - GenericTypeResolver ** New Feature * [DATACMNS-110] - Provide infrastructure for CDI integration for repositories * [DATACMNS-113] - Add @ReadingConverter and @WritingConverter to resolve conversion disambiguities ** Task * [DATACMNS-104] - Upgrade to Spring 3.0.7. * [DATACMNS-118] - Releases 1.2 GA Changes in version 1.2.0.RC1 (2011-12-6) ---------------------------------------- ** Bug * [DATACMNS-71] - Reference documentation contains invalid cross reference * [DATACMNS-88] - TypeDiscoverer.getMapValueType causes ArrayIndexOutOfBoundsException in some cases * [DATACMNS-92] - Invalid Entities are placed in the MappingContext - Cache * [DATACMNS-98] - ClassCastException on getReturnedDomainClass for variable types * [DATACMNS-99] - SimpleTypeHolder does not consider complex enum values as simple * [DATACMNS-108] - RepositoryFactorySupport throws ClassCastException for annotation based repositories ** Improvement * [DATACMNS-39] - TypeInformation should support WildcardType * [DATACMNS-77] - Limit memory consumption with cache - ClassTypeInformation * [DATACMNS-91] - CrudRepository exceptions * [DATACMNS-93] - OSGi manifest should have dynamic import package directive added * [DATACMNS-94] - Add more comparison operators to Type * [DATACMNS-95] - Document usage of DomainClassConverter, DomainClassPropertyEditor as well as PageableArgumentResolver * [DATACMNS-97] - PartTree should allow iterating over all parts of a given type * [DATACMNS-101] - Allow Subclasses of AbstractMappingContext to control the execution of getNestedTypesToAdd() * [DATACMNS-105] - BeanWrapper should handle exceptions itself * [DATACMNS-106] - Introduce getReturnedObjectType() on QueryMethod * [DATACMNS-107] - Allow usage of True/False for Query ** Refactoring * [DATACMNS-100] - SimpleTypHolder should not consider Number as simple type in general ** Task * [DATACMNS-103] - Setup hybrid Spring 3.0.6 / 3.1 build Changes in version 1.2.0.M2 (2011-10-21) ---------------------------------------- ** Bug * [DATACMNS-81] - RepositoryInterfaceAwareBeanPostProcessor potentially suffers from NullPointerException ** Improvement * [DATACMNS-79] - Treat empty strings as null for username and password for UserCredentials * [DATACMNS-82] - Increase performance by defaulting PlatformTransactionManager bean name * [DATACMNS-83] - RepositoryInterfaceAwareBeanPostProcessor should log not being able to load the repo interface * [DATACMNS-84] - Improve access to property paths * [DATACMNS-85] - Extend PersistentPropertyPath * [DATACMNS-87] - AbstractMappingContext.getPropertyPath(...) must not access the leaf property's PersistentEntity ** New Feature * [DATACMNS-76] - Extract core converter infrastructure from MongoDB module * [DATACMNS-78] - Add LessThanEquals and GreaterThanEquals as supported query keywords ** Refactoring * [DATACMNS-73] - Create dedicated crossstore package * [DATACMNS-75] - Consolidate entity instantiation strategies * [DATACMNS-86] - Remove o.s.d.transaction package, move ChangeSetBackedTransactionSynchronization to o.s.d.persistence ** Task * [DATACMNS-80] - Upgrade to Spring 3.0.6 Changes in version 1.2.0.M1 (2011-09-01) ---------------------------------------- ** Bug * [DATACMNS-55] - java.util.Properties cannot be stored to mongodb * [DATACMNS-57] - Use of parameterized type in constructor arguments is not supported * [DATACMNS-65] - BasicPersistentEntity potentially suffers from ConcurrentModificationException * [DATACMNS-68] - NullPointerException in AbstractPersistentProperty::getComponentType() ** Improvement * [DATACMNS-56] - PreferredConstructorDiscoverer shouldn't throw an exception in case not finding a constructor * [DATACMNS-59] - AbstractQueryCreator should honor both static and dynamic sorting * [DATACMNS-60] - Polish reference documentation for repositories * [DATACMNS-63] - Add possibility to detect TypeInformation for a class' method's return type * [DATACMNS-64] - QueryMethod should reject paging methods without a Pageable argument * [DATACMNS-67] - QueryMethod should consider plain Iterable return types as collection query ** New Feature * [DATACMNS-66] - Provide infrastructure to parse IgnoreCase from query methods ** Refactoring * [DATACMNS-61] - Add ability to add new special parameter types to query methods * [DATACMNS-62] - Make accessor methods for QueryMethod type public and drop type enum Changes in version 1.1.0.RELEASE (2011-07-21) --------------------------------------------- General * [DATACMNS-54] - change dependency on "querydsl-mongodb" to "querydsl-core" Changes in version 1.1.0.RC1 (2011-07-19) ----------------------------------------- General * [DATACMNS-50] - Extend mapping metadata to allow defining order of PersistentProperties * [DATACMNS-53] - Upgrade to Querydsl 2.2.0 Repositories * [DATACMNS-49] - Create infrastructure to externalize queries * [DATACMNS-52] - Declaring an intermediate base repository does not work correctly Changes in version 1.1.0.M2 (2011-06-21) ---------------------------------------- General * [DATACMNS-27] - Missing plugin repository * [DATACMNS-31] - Check for null in arguement passed to MappingBeanHelper.isSimpleType * [DATACMNS-42] - MappingContext does not map BigDecimal correctly * [DATACMNS-43] - PreferredConstructorDiscoverer - wrong exception message * [DATACMNS-46] - Make org.joda.time an optional import Repositories * [DATACMNS-44] - ParametersParameterAccessor iterator will never iterate... * [DATACMNS-45] - Property check for repository methods fails for properties starting with _ * [DATACMNS-48] - Spelling errors in class names - "Executer" -> "Executor" Repositories Changes in version 1.1.0.M1 (2011-06-02) ---------------------------------------- General * [DATACMNS-32] - Extracted Querydsl support code from JPA and Mongo modules * [DATACMNS-30] - Implementations of Page, Pageable and Sort are now serializable * [DATACMNS-34] - Improved algorithm to detect persistence constructors * [DATADOC-98] - Mapping subsystem can now work with multi-dimensional arrays and collections * [DATADOC-109] - Refactored mapping subsystem * [DATADOC-115] - Upgraded to Querydsl 2.2.0-beta4 Repositories * [DATACMNS-33] - Repository.count() now returns a primitive long * [DATACMNS-35] - Repository has now a delete(ID id) method * [DATACMNS-36] - Improve transaction handling for repositories * [DATACMNS-40] - Rename @RepositoryProxy to @RepositoryDefinition * [DATADOC-43] - Added Near and Within as keywords for query method parser Changes in version 1.0.0 (2011-04-18) ---------------------------------------- General * Deal with multi-dimensional arrays as property types. Changes in version 1.0.0.RC1 (2011-04-8) ---------------------------------------- General * Added MappingContextAware interface * Made failure message customizable. * Changing to use source 1.5; removed some @override on interface methods Repository * ClassUtils.getReturnedDomainClass works for parameterized component types of Collections and Page. Changes in version 1.0.0.M7 (2011-04-5) ---------------------------------------- General * Added isCollectionLike() and isMap() to TypeInformation interface. * Refactored Property to use TypeInformation infrastructure. * Persistent constructor now detects non-public constructor. * Removed slf4j dependency Repository * Expose type of a query parser Property. * Refactored RepositoryFactorySupport.getQueryLookupStrategy * Made PageImpl safe to take an empty collection. * Domain class lookup in QueryMethod falls back to the repository domain class for methods not returning a domain class. Changes in version 1.0.0.M6 (2011-03-25) ---------------------------------------- General * extracted StateBackedCreator interface * added caching to AbstractConstructorEntityInstantiator * Use BeanUtils to instantiate objects to not enforce them to be public. Changes in version 1.0.0.M5 (2011-03-23) ---------------------------------------- General * Polished basic mapping infrastructure * Changed package names for cross-store persistence support and removed unused prototype classes Repository * Minor API change in AbstractRepositoryConfigDefinitionParser * Extension module for Spring MVC integration (DATAJPA-19) Changes in version 1.0.0.M4 (2011-03-15) ---------------------------------------- General * Fixed dependency scopes of logging libraries (DATACMNS-14) Repository * Improved ParameterAccessor infrastructure * Added support for 'Distinct' keyword in finder method names (DATACMNS-15) * Added support for 'In' and 'NotIn' keywords (DATACMNS-16) * Introduced metamodel for entities and repositories (DATACMNS-17) * Fixed returning wrong class PersistableEntityMetadata (DATACMNS-19) * Introduced infrastructure to post-process RepositoryQuery instances (DATACMNS-18) * Renamed Repository.findById(...) to findOne(...) (DATACMNS-20) * Changed method signature of Repository.findAll(...) and according methods to Iterable (DATACMNS-21) Changes in version 1.0.0.M3 (2011-02-09) ---------------------------------------- * Improved documentation for repositories Changes in version 1.0.0.M2 (2011-01-31) ---------------------------------------- General * Indexed annotation now has an "indexName" attribute Repository * Improvements in the pagination support * Introduced Property abstraction for more sophisticated query method name parsing. * Made transaction support in repository factory base classes optional Changes in version 1.0.0.M1 (2010-12-23) ---------------------------------------- General * Indexed annotation to indicate that a field should be indexed * Classes for change set support including ChangeSetBackedTransactionSynchronization Aspects * Abstract superaspect for aspects that advice field access with a mixin for all types annotated with a given annotation. * Abstract superaspect to advise field read and write and introduce a mixin interface. Repository * Base classes for the repository support * Pagination support