我正在寻找显示如何将MongoDB与Hibernate集成的资源(最好是从春季开始),以便我可以在RDBMS和NoSql替代方案之间切换:有没有人有这方面的经验?
我之前没有使用过Spring Data,但是我已经多次使用Hibernate ORM用于基于MySQL的应用程序.我只是不明白为基于MongoDB的应用程序在两者之间选择哪个框架.
我已经尝试寻找答案,但我找不到在生产环境中对两者进行比较的答案.有没有人发现使用MongoDB使用这两个框架有问题?
spring mongodb spring-data spring-data-mongodb hibernate-ogm
我们正在尝试将旧的Oracle sql应用程序转换为NO-SQL,我们选择了Mongo DB.
像Hibernate这样的Mongo DB是否有ORM支持可以减少我们的编码?
我们可以使用JPA规范为Mongo DB构建应用程序吗?
如果JPA,哪个ORM供应商最好选择,为什么?
他们为Mongo DB提出了无sql方言,以便我们可以使用非关系数据库构建应用程序吗?
我在部署耳朵时收到此错误.
org.jboss.msc.service.StartException in service jboss.persistenceunit."test.ear/server.war#graphdb": java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.ogm.service.impl.OgmIntegrator not a subtype
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:172)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:117)
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:182)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: java.util.ServiceConfigurationError: org.hibernate.integrator.spi.Integrator: Provider org.hibernate.ogm.service.impl.OgmIntegrator not a subtype
at java.util.ServiceLoader.fail(ServiceLoader.java:239)
at java.util.ServiceLoader.access$300(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:376)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.loadJavaServices(ClassLoaderServiceImpl.java:324)
at org.hibernate.integrator.internal.IntegratorServiceImpl.<init>(IntegratorServiceImpl.java:40)
at org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.build(BootstrapServiceRegistryBuilder.java:213)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.buildBootstrapServiceRegistry(EntityManagerFactoryBuilderImpl.java:288)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:161)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:160)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:135)
at org.hibernate.ogm.jpa.HibernateOgmPersistence.createContainerEntityManagerFactory(HibernateOgmPersistence.java:96)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:318)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$1100(PersistenceUnitServiceImpl.java:67)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:167)
... 7 more
Run Code Online (Sandbox Code Playgroud)
我的持久性xml是
<persistence-unit name="graphdb" transaction-type="JTA"> …Run Code Online (Sandbox Code Playgroud) 我有一个使用SQL Server的应用程序.我想使用NOSQL存储,我认为它是图形,因为我的数据是高度连接的.Neo4j是一个选择.
我希望能够在不触及应用程序层的情况下切换数据库,例如,只修改一些xml配置文件.我已经看过网上公开的一些示例,我看到ORM和OGM没有以相同的方式配置应用程序,每个配置文件都有自己的名称,更重要的是它自己的结构.查看每个代码,发现他们初始化会话的方式也不同,这对我的想法听起来不太好.
我的问题是:"在没有触及现有应用程序代码的情况下在两个数据库之间切换是否可行或可行 - 没有很大的开销?我可能会添加内容但不会触及已存在的内容".在SQL和NOSQL数据库之间建立纯多语言持久性是一个好主意,例如,使用Hibernate.
在深入挖掘之前,我想听听你们的意见.我们在这里有一个Hibernate男人和我们在一起吗?
我正在尝试使用Hibernate和Jersey保存实体.
我尝试发送的JSON是:
{
"firstname":"Jon",
"middlename":"J",
"lastname":"Smith",
"dob":"10-10-1990",
"gender":"male"
}
Run Code Online (Sandbox Code Playgroud)
当我用Postman发送它时,我得到Status: 200 OK但是记录没有保存在数据库中.
我使用的数据库是Neo4j.
这是我的PersonDAO班级:
package com.Neo4jRestAPI;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.hibernate.HibernateException;
import com.google.gson.Gson;
public class PersonDAO {
public void addPerson(Person person){
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Person p = new Person();
p.setFirstname(person.getFirstname());
p.setMiddlename(person.getMiddlename());
p.setLastname(person.getLastname());
p.setDob(person.getDob());
p.setGender(person.getGender());
em.persist(p);
em.flush();
tx.commit();
em.clear();
em.close();
emf.close();
}
catch ( Exception e ) { …Run Code Online (Sandbox Code Playgroud) 最近,我开始研究 mongo。由于 mongodb 的整个概念是无模式且面向文档的,我如何将关系转换为实体?
我在java中使用hibernate ORM将对象映射到表。mongodb 是否需要做同样的事情?
限制我使用 OGM 的事情:
一旦 Java 实体映射到 mongo 中的集合,mongo 无模式的概念是否仍然有效。在这种情况下,我必须将成员变量映射到该集合的键。此外,如果 mongo 集合应该包含嵌套对象或对象数组,那又如何?
Hibernate最近(2015 年 1 月)为 NoSQL 数据库启动了OGM。
任何人都可以帮助我决定为 mongo 选择 OGM 吗?
我收到以下错误
线程"main"中的异常javax.persistence.PersistenceException:[PersistenceUnit:person]无法在org.hibernate.jpa的org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249)中构建Hibernate SessionFactory.在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4的org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform(EntityManagerFactoryBuilderImpl.java:860)中的boot.internal.EntityManagerFactoryBuilderImpl.access $ 600(EntityManagerFactoryBuilderImpl.java:120) .perform(EntityManagerFactoryBuilderImpl.java:850)位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java)的org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425) :849)org.hibernate.ogm.jpa.Hibe上的org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)rnateOgmPersistence.createEntityManagerFactory(HibernateOgmPersistence.java:63)位于javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)的javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)at com.ihappyk.utility.Utility.setUpEntityManagerFactory (utility.java:11)com.ihappyk.work.PersonWorker.main(PersonWorker.java:14)引起:org.hibernate.MappingException:无法实例化id生成器[entity-name = com.ihappyk.model.Person ] org.hibernate.id.factory.内部.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:123)位于org.hibernate.internal.SessionFactoryImpl的org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:225).(SessionFactoryImpl .java:323)org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859)org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform(EntityManagerFactoryBuilderImpl.java:857)... 9 m ore造成:org.hibernate.HibernateException:org.hibernate.id.factory.internal中org.hibernate.id.UUIDGenerator.configure(UUIDGenerator.java:111)上UUID转换的意外返回类型[java.lang.Long] .DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:117)... 13更多
Utilty.java
public class Utility {
private static EntityManagerFactory entityManagerFactory;
//@BeforeClass
public static EntityManagerFactory setUpEntityManagerFactory() {
entityManagerFactory = Persistence.createEntityManagerFactory( "person" );
return entityManagerFactory;
}
//@AfterClass
public static void closeEntityManagerFactory() {
entityManagerFactory.close();
}
}
Run Code Online (Sandbox Code Playgroud)
持久的阶级
@Entity
public class Person {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private long id;
private String firstName;
private …Run Code Online (Sandbox Code Playgroud) 有没有人对Hibernate OGM与Kundera的使用有反馈?我知道这两个框架正在为NoSQL解决方案提供Java持久性(JPA)支持,我希望从那些研究两者的人的经验中受益.听起来昆德拉支持更多的NoSQL DataSource.