2016-04-11 41 views
0

集成不起作用mongodb + hibernate,不会抛出任何异常。运行em.insert行后(p)不会插入任何记录。集成jpa + mongodb“不起作用”

public class Principal { 

    public static void main(String[] args) { 

    EntityManagerFactory emf = Persistence 
    .createEntityManagerFactory("UnidadOGM"); 

    System.out.println(emf); 
    EntityManager em = emf.createEntityManager(); 
    Persona p = new Pwersona(); 
    p.setId("1"); 
    p.setNombre("Alberto"); 
    p.setNombre("Perez"); 
    em.persist(p); 
    List<Persona> lista=em.createQuery("select p from Persona p",Persona.class).getResultList(); 

    for(Persona p :lista) { 

     System.out.println(p.getNombre()); 
     System.out.println(p.getApellidos()); 
    } 
    em.close(); 

    } 

} 




Class Persona 

import javax.persistence.Entity; 
import javax.persistence.Id; 

import org.hibernate.annotations.Type; 

@Entity 
public class Persona { 

@Id 
@Type(type = "objectid") 
private String id; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

private String nombre; 
private String apellidos; 

public String getApellidos() { 
return apellidos; 
} 

public void setApellidos(String apellidos) { 
this.apellidos = apellidos; 
} 

public String getNombre() { 
return nombre; 
} 

public Persona() { 
super(); 
} 

public Persona(String nombre) { 
super(); 
this.nombre = nombre; 
} 

public void setNombre(String nombre) { 
this.nombre = nombre; 
} 

} 

在persistence.xml中,不检测配置数据库。如果我更改数据库的端口或数据库的名称与不存在的数据库,不会跳过任何例外。是的,读取persistence.xml文件,如果持久性单元更改UnidadOGM,则由另一个链跳转不存在persistence-unit的异常。

<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
version="2.0"> 
<persistence-unit name="UnidadOGM" transaction-type="JTA"> 

<provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> 
<class>com.arquitecturajava.Persona</class> 
<properties> 

<property name="hibernate.ogm.datastore.provider" value="mongodb" /> 
<property name="hibernate.ogm.datastore.grid_dialect" 
value="org.hibernate.ogm.datastore.mongodb.MongoDBDialect" /> 
<property name="hibernate.ogm.datastore.database" value="arquitecturajava" /> 
<property name="hibernate.ogm.mongodb.host" value="127.0.0.1" /> 
<property name="hibernate.ogm.mongodb.port" value="27017" /> 
</properties> 
</persistence-unit> 

</persistence> 

依赖关系:

<dependency> 
<groupId>org.hibernate.ogm</groupId> 
<artifactId>hibernate-ogm-mongodb</artifactId> 
<version>4.1.0.Beta8</version> 
</dependency> 
<dependency> 
<groupId>org.hibernate.javax.persistence</groupId> 
<artifactId>hibernate-jpa-2.0-api</artifactId> 
<version>1.0.1.Final</version> 
</dependency> 
<dependency> 
<groupId>org.jboss.spec.javax.transaction</groupId> 
<artifactId>jboss-transaction-api_1.1_spec</artifactId> 
<version>1.0.0.Final</version> 
<scope>provided</scope> 
</dependency> 
<dependency> 
<groupId>org.jboss.jbossts</groupId> 
<artifactId>jbossjta</artifactId> 
<version>4.16.4.Final</version> 
</dependency> 

回答

1

你需要一个事务插入数据

EntityManagerFactory emf = Persistence 
    .createEntityManagerFactory("UnidadOGM"); 

    EntityManager em = emf.createEntityManager(); 
    Persona p = new Pwersona(); 
    p.setId("1"); 
    p.setNombre("Alberto"); 
    p.setNombre("Perez"); 

    em.getTransaction().begin(); 

    em.persist(p); 

    em.getTransaction().commit(); 
    em.close(); 

如果要插入并在一个事务中查询数据,也许你需要调用flush()后插入数据。

+0

感谢,这是结果:在线程 “主要” java.lang.IllegalStateException例外:JTA EntityManager的不能使用getTransaction() \t在org.hibernate.jpa.spi.AbstractEntityManagerImpl.getTransaction(AbstractEntityManagerImpl.java:1368 ) \t在org.hibernate.ogm.jpa.impl.OgmEntityManager.getTransaction(OgmEntityManager.java:591) \t在com.di.maven.App.main(App.java:25) – user1358518

+0

@ user1358518请,加完整的堆栈跟踪到你的问题。 –

+0

@ user1358518如果您正在使用独立应用程序,则应将持久性中的事务类型设置为RESOURCE_LOCAL – Davide