I have a collection called Products
in my MongoDB database, which is represented by the interface IProductPrice
in my Java code. The following repository declaration causes Spring Date to look to the collection db.collection: Intelliprice.iProductPrice
.
I want it to configure it to look in db.collection: Intelliprice.Products
using an external configuration rather than putting an @Collection(..)
annotation on IProductPrice
. Is this possible? How can I do this?
public interface ProductsRepository extends
MongoRepository<IProductPrice, String> {
}
The only way you can currently achieve this is by annotating your domain class with
@Document
using thecollection
property to define the name of the collection instances of this class shall be persisted to.However, there's a JIRA issue open that suggests adding a pluggable naming strategy to configure the ways class, collection and property names are handled in a more global way. Feel free to comment your use case and vote it up.
using answer from Oliver Gierke above, working on a project where I need to create multiple collections for one entity, I wanted to use the spring repositories and needed to specify the entity to use before using the repository.
I managed to modify the repository collection name on demand using this system, it using SPeL. You can only work on 1 collection at a time though.
Domain object
Default Spring Repository:
Custom Repository Interface:
implementation:
To use it:
Otherwise if you need to use configuration variables, you could maybe use something like this? source