Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate ogm mongodb时间戳_Java_Mongodb_Hibernate_Hibernate Ogm - Fatal编程技术网

Java hibernate ogm mongodb时间戳

Java hibernate ogm mongodb时间戳,java,mongodb,hibernate,hibernate-ogm,Java,Mongodb,Hibernate,Hibernate Ogm,我有以下mongodb { "_id" : ObjectId("57713c6304f4dc08008b45ba"), "SYS_FluxName" : "ERDF_F12_17X100A100F0073T_GRD-F046_0321_00011_FL_00001_00001.xml", "SYS_ReadDateTime" : Timestamp(6300883749567463, 83), "SYS_BaseNameZip" : "ERDF_F12_17X10

我有以下mongodb

{
    "_id" : ObjectId("57713c6304f4dc08008b45ba"),
    "SYS_FluxName" : "ERDF_F12_17X100A100F0073T_GRD-F046_0321_00011_FL_00001_00001.xml",
    "SYS_ReadDateTime" : Timestamp(6300883749567463, 83),
    "SYS_BaseNameZip" : "ERDF_F12_17X100A100F0073T_GRD-F046_0321_00011_M_30_20160301223530.zip",
    "SYS_Status" : NumberLong(1),
    "SYS_DateCreaERDF" : "2016-03-01T20:38:48Z"
}
以及以下实体

public class EnlFluxF12Entry  implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="_id")
    private ObjectId id;

    @Column(name="SYS_FluxName")
    public String sysFluxName;

    @Column(name="SYS_ReadDateTime")
    @Temporal(TemporalType.TIMESTAMP)
    public Date sysReadDateTime;

    @Column(name="SYS_BaseNameZip")
    public String sysBaseNameZip;

    @Column(name="SYS_Status")
    public Long sysStatus;

    @Column(name="SYS_DateCreaERDF")
    public String sysDateCreaERDF;

    public ObjectId getId(){
        return id;
    }
...
}
尝试查找()时,字段public Date sysReadDateTime生成异常

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="heroku_6tp7jgpd" />
            <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>

org.hibernate.ogm.jpa.hibernateogm持久性

我是否应该使用MongoDB时间戳类型将日期类型更改为sweet?

此问题的问题是时间戳是MongoDB的内部类型,Hibernate OGM无法将其转换为Java类型

使用时:

@Column(name="SYS_ReadDateTime")
@Temporal(TemporalType.TIMESTAMP)
public Date sysReadDateTime;
Hibernate OGM将在DB上创建如下内容:

"SYS_ReadDateTime" : "2017/01/11 11:52:28:493 +0000"
您有错误,因为情况并非如此

据我所知,目前您有以下选择:

  • 忽略字段。你真的需要读吗?时间戳是一种内部MongoDb类型,我不确定其他应用程序是否应该读取或使用它

  • 使用本机查询。我认为您可能能够使用本机查询读取值,然后使用Java进行协商。您将在中找到更多详细信息。在使用本机查询时,不需要返回实体,这不是很方便,但可能会起作用

  • 您可以为Hibernate OGM提供补丁。在中,我们将MongoDB类型转换为Java类型。我认为您需要类似于我们为ObjectID所做的事情。 您可以查看包下的类

  • 创建您自己的方言,扩展MongdbDial并重写MongoDBDialect#overrideType方法,以便您可以转换时间戳使用的值。然后,您可以使用属性
    hibernate.ogm.datastore.grid\u方言
    来使用它,而不是默认的属性


  • 很抱歉,目前没有更简单的方法来解决这个问题,我们的路线图上有提供更通用的方法,以便用户可以传递自定义类型。

    您可以向我们展示您使用的配置吗?我添加了persistence.xml您是通过hibernate mongo API插入数据的吗?我的意思是BSONTimestamp是一种内部类型。您应该将mongo db collection更改为使用BSONDate,并确保其正常工作。值得一看的东西。我对mongoDB有只读访问权限,我不能更改任何东西。看看您是否可以将其映射到您这边的长期价值
    "SYS_ReadDateTime" : "2017/01/11 11:52:28:493 +0000"