Я ищу ресурсы, показывающие, как интегрировать MongoDB с Hibernate (желательно из Spring), чтобы я мог переключаться между RDBMS и альтернативой NoSql: есть ли у кого-нибудь опыт в этом?
Гибернация с MongoDB
Ответы (10)
Вы не можете легко это сделать. Смысл Hibernate - отображать объекты Java в реляционную базу данных. Хотя Hibernate абстрагируется от многих деталей, вам все же необходимо понимать, как реляционные базы данных работают с такими вещами, как внешние и первичные ключи, и как влияют на производительность запросы, которые вы выполняете. MongoDB требует совершенно другого способа проектирования вашей базы данных, ориентированного на объекты, а не на столбцы и таблицы. в то время как вы можете создать диалект Hibernate для MongoDB, создав дизайн, который будет работать как с реляционной базой данных, так и с базой данных NoSql, даст вам дизайн, который плохо работает с обоими.
А как насчет Hibernate OGM? Он предоставляет JPA для баз данных без SQL.
Миграция была бы проще, если бы вы использовали Spring MongoTemplate (аналогично HibernateTemplate).
Среди его функций - поддержка аннотаций JPA (хотя я не уверен, в какой степени).
Подробнее: http://www.springsource.org/spring-data/mongodb
Вам понадобится следующее:
- Добавьте JAR-файл spring-data-mongodb в свой проект (доступен в maven central).
- Добавьте в проект JAR-файл mongo-java-driver (доступен в maven central).
- Используйте предоставленный класс MongoTemplate аналогично HibernateTemplate. Например:
mongoTemplate.findById(id, MyClass.class);
mongoTemplate.insert(myObject);
Вот конкретный пример с кодом: use-spring-and-hibernate- with-mongodb
Если вы используете Java, вы можете использовать Hibernate OGM, он обеспечивает поддержку Java Persistence для баз данных NoSQL.
Для получения дополнительной информации посетите http://hibernate.org/ogm/.
Ранее была проделана хорошая работа:
- http://pragmaticintegrator.wordpress.com/2011/07/14/use-spring-and-hibernate-with-mongodb/
- http://pragmaticintegrator.wordpress.com/2011/07/27/unit-test-your-springhibernate-and-mongodb-setup/#comments
обратитесь к этим ссылкам. это будет вам полезно.
Также существует kundera, который использует аннотации JPA для чтения / записи вашего объекта из / в mongodb. Если вы хорошо знакомы с гибернацией, она должна быть довольно простой в использовании.
Недавно я попробовал Morphia, который использует тот же подход, но со своими собственными аннотациями. Отлично работает
Пусть этот блог поможет: http://drorbr.blogspot.com/2010/02/migrating-springhibernate-application.html Здесь Дрор Березницкий красиво описывает, как интегрировать решение на основе sping / hibernate с mongodb.
Для полноты картины PlayORM теперь также поддерживает MongoDB. PlayORM - это решение для сопоставления объектов NoSQL, поэтому вы можете написать POJO и позволить ему заниматься всеми деталями маршалинга / демаршалинга в MongoDB. Посетите его документацию здесь.
Чтобы привести вам пример, я делаю нечто подобное. В ColdFusion интегрирован Hibernate, и для сохранения вашего объекта Hibernate вам необходимо выполнить EntitySave (Obj). Однако мы создали объект Orm, а затем использовали компонент mongoDB Coldfusion и просто сохранили объект, выполнив mongo.Save (obj, collectionName).
Я думаю, что Hibernate обеспечивает желаемую функциональность. Взгляните на это, найденное на их официальном сайте: Смешивание нескольких хранилищ данных NoSQL в одном приложении, например используйте Neo4j для графа дружбы и MongoDB для своих сообщений в блоге. Или смешайте NoSQL и реляционные базы данных.