2017-01-09 3 views
1

я хочу запросить MongoDB здесь мой кодвыполнение запроса MongoDB зимуют OGM возвращение всегда нулевой

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; 
} 

главный

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" 
} 

Проблема заключается в том, что entityManager.find возвращают всегда нуль. Есть ли какие-либо проблемы в моем коде?

ответ

0

Я думаю, что он возвращает null, потому что что-то нечетное в сопоставлении или в объекте JSON, и он не может найти сущность, которую вы ищете.

JSON объект, который вы хотите получить еще _id: ObjectId("rzerzer"), это выглядит не так, потому что 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. 

Даже если объект в БД является правильным, оно отображается в виде строки, так Hibernate OGM не ожидает ObjectId.

Отображение идентификатора на лица должно быть:

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

или

@Id 
public ObjectId id; 

Еще одна странная вещь так, как вы используете находку:

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

find метод требует точного идентификатора объекта. Если отображение является правильным, это должно работать entityManager.find(Flux.class, "rzerzer");

Если вы не уверены в значении идентификатора в БД можно также использовать HQL:

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

ТНХ для вашего ответа. Я исправил все эти проблемы, но он остается отметкой времени. какой тип я должен поместить в SYS_ReadDateTime –

+0

Временная метка не поддерживается Hibernate OGM на данный момент. Вы можете попробовать сопоставить его как String – Davide

+0

нет, он не работает: невозможно установить поле java.lang.String .... to org.bson.types.BSONTimestamp –

Смежные вопросы