2017-06-18 5 views
0

Ich versuche eine einfache Mongo DB und Hibernate OGM Beispiel. Hier ist meine persistence.xmlHibernate.ogm.datastore.create_database funktioniert nicht für MongoDB

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 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"> 
    <persistence-unit name="mongo-ogm" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> 
    <class>com.test.Employee</class> 
    <properties> 
     <!-- <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform"/> --> 
     <property name="hibernate.ogm.datastore.provider" value="mongodb"/> 
     <property name="hibernate.ogm.datastore.database" value="mongotest"/> 
     <property name="hibernate.ogm.datastore.create_database" value="true"/> 
     <property name="hibernate.ogm.datastore.host" value="mymongo"/> 
     <property name="hibernate.ogm.datastore.port" value="1234"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

In den Protokollen, ich sehe

INFO: OGM001206: Mongo database named [mongotest] is not defined. Creating it!

Ich gehe davon aus, dass die Datenbank mongotest sollte in Mongo DB nach der Anwendung Stiefel .. up erstellt werden, aber es zeigt nicht wenn ich in Mongo show dbs ausführen. Auch mein JPA-basiertes create (em.persist) wirft keine Fehler - ich bin mir nicht sicher, was hinter den Kulissen passiert. Dies ist Fett JAR basierter Setup (kein Java EE IST)

+0

Es ist normal. MongoDB erstellt tatsächlich weder einen Datenbank-Namespace noch eine Sammlung, bis Sie tatsächlich etwas darin schreiben. Sobald Sie tatsächlich Daten geschrieben haben, werden sowohl die Datenbank als auch die Sammlung angezeigt. –

+0

Ok danke für die Bestätigung. Aber ich habe das auch versucht, d. H. "EntityManager.persist()" verwendet, um einen Datensatz zu erstellen - kein Fehler. Ich habe erwartet, dass die Sammlung erstellt wird - aber ich sehe weder die Datenbank noch die Sammlung. Schätze, ich vermisse etwas, aber nicht sicher was – Abhishek

Antwort

1

Ok meines schlechten .. Verwöhnt von dem impliziten Java EE Transaktionsmanagement! Dieses ist eine einfache Java-SE-Anwendung und meine erstellen Logik fehlte Transaktionsdemarkation heißt hinzugefügt I em.getTransaction().begin(); vor persist Aufruf und hinzugefügt em.getTransaction().commit(); danach, und ich kann die erwarteten Ergebnisse sehen

Verwandte Themen