2017-01-09 3 views
1

ich ein mongodb hier mein Codeanfragende MongoDB OGM Rückkehr immer null

persistence.xml

<?xml version="1.0"?> 
<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="primary" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider> 
     <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="******" /> 
      <property name="hibernate.ogm.datastore.host" value="******" /> 
      <property name="hibernate.ogm.datastore.port" value="******" /> 
      <property name="hibernate.ogm.datastore.username" value="******" /> 
      <property name="hibernate.ogm.datastore.password" value="******" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

Flux.java

@Entity 
@Table(catalog="f12", schema="public", name="enl_flux_f12_entry") 
public class enl_flux_f12_entry{ 

    @Id 
    public String id; 

    public String SYS_FluxName; 
    public byte[] SYS_ReadDateTime; 
    public String SYS_BaseNameZip; 
    public Long SYS_Status; 
    public String SYS_DateCreaERDF; 
} 

Haupt abfragen wollen, in den Ruhezustand

public static void main(String[] args) throws ClassNotFoundException{ 

     EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("primary"); 
     EntityManager entityManager = entityManagerFactory.createEntityManager(); 
     entityManager.getTransaction().begin(); 
     enl_flux_f12_entry f = entityManager.find(Flux.class, "*id*"); 
     System.out.println(f.id); 
     entityManager.flush(); 
     entityManager.close(); 
    } 

mongodb

{ 
    "_id" : ObjectId("rzerzer"), 
    "SYS_FluxName" : "zerzerze.xml", 
    "SYS_ReadDateTime" : Timestamp(6300883749567463, 83), 
    "SYS_BaseNameZip" : "rferfer.zip", 
    "SYS_Status" : NumberLong(1), 
    "SYS_DateCreaERDF" : "2016-03-01T20:38:48Z" 
} 

Das Problem ist, dass EntityManager.find immer null zurück. Gibt es ein Problem in meinem Code?

Antwort

0

Ich denke, es gibt null zurück, weil etwas im Mapping oder im JSON-Objekt seltsam ist und es die Entität nicht finden kann, nach der Sie suchen.

Das JSON-Objekt Sie erhalten möchten _id: ObjectId("rzerzer") hat, das sieht nicht richtig aus, weil an ObjectId in MongoDB should be:

The 12-byte ObjectId value consists of: 

a 4-byte value representing the seconds since the Unix epoch, 
a 3-byte machine identifier, 
a 2-byte process id, and 
a 3-byte counter, starting with a random value. 

Selbst wenn das Objekt in der DB richtig ist, es als ein String zugeordnet ist, so Hibernate OGM erwartet keine ObjectId.

Die Abbildung der ID auf der Einheit sollte sein:

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

oder

@Id 
public ObjectId id; 

Eine weitere seltsame Sache ist die Art und Weise Sie verwenden finden:

enl_flux_f12_entry f = entityManager.find(Flux.class, "*id*"); 

die find Methode erfordert die genaue ID der Entität. Wenn die Zuordnung richtig ist, sollte diese entityManager.find(Flux.class, "rzerzer");

funktionieren, wenn Sie nicht sicher über die ID-Wert sind in der db Sie auch HQL verwenden können:

List<Flux> entries = entityManager.createQuery("from Flux").list(); 
+0

thx für Ihre Antwort. Ich habe alle diese Probleme behoben, aber es bleibt der Timestamp. Welchen Typ sollte ich in SYS_ReadDateTime setzen? –

+0

Zeitstempel werden im Moment nicht von Hibernate OGM unterstützt. Sie können versuchen, es als String – Davide

+0

Zuordnung nein, es funktioniert nicht: Kann nicht java.lang.String Feld .... zu org.bson.types.BSONTimestamp –