2016-04-11 38 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