Hibernate OGM 已不再维护

我很高兴宣布Hibernate OGM 4.2.0.CR1的发布。

新版本为您带来了对Apache Cassandra的初始支持,JP-QL查询的几个改进,对MongoDB 3、MongoDB副本集的支持,新的内置类型等等。

您可以从SourceForge或通过Maven、Gradle等下载Hibernate OGM 4.2.0.CR1,使用以下GAV坐标

  • org.hibernate.ogm:hibernate-ogm-core:4.2.0.CR1用于Hibernate OGM引擎和
  • org.hibernate.ogm:hibernate-ogm-<%DATASTORE%>:4.2.0.CR1,具体取决于您要使用的后端。

Apache Cassandra支持的预览

CassandraBigTable家族中性能优异且可扩展的数据存储。支持它的请求可以追溯到Hibernate OGM的早期。因此,我们非常高兴终于推出了这个产品。感谢所有参与此旅程的人:Michaël Figuière、Khanh Maudoux、John Worrell和Jonathan Halliday!

要使用Cassandra后端,将hibernate-ogm-cassandra模块添加到类路径中,并为您的持久化单元指定以下属性

hibernate.ogm.datastore.provider = cassandra_experimental
hibernate.ogm.datastore.database = my_keyspace
hibernate.ogm.datastore.host = cassandra.example.com

目前,Cassandra后端处于“技术预览”状态。我们还有很多工作要做(例如,集群支持、替代关联持久化选项、查询、文档),但我们认为现在有了正确的基础。请注意,映射细节仍可能发生变化。尽管如此,现在正是您尝试这个新后端并让我们了解您的经验的好时机。

我们非常欢迎任何功能请求、错误报告和其他反馈。特别是关于将领域模型元素映射到Cassandra结构的思想对我们非常有价值。

查询改进

我们花了更多的时间来提高对映射JP-QL查询到本地NoSQL查询或通过Hibernate Search + Lucene执行的全文查询的支持。

现在您可以使用枚举或日期作为查询参数

List<Movie> movies = entityManager.createQuery( "SELECT m FROM Movie m WHERE m.genre IN (:genre)", Movie.class )
    .setParameter( "genre", EnumSet.of( Genre.DRAMA, Genre.COMEDY ) )
    .getResultList();

正如您所期望的,给定的参数值被转换为在数据存储中使用的相应类型,并传递给查询引擎。

嵌套可嵌入元素的元素集合映射修复

此版本修复了与存储在元素集合中的嵌套可嵌入元素映射相关的错误。这影响了支持的文档存储以及Neo4j。例如,考虑以下实体模型

@Entity
public class Account {

    @ElementCollection
    List<Address> addresses;
}

@Embeddable
public class Address {
    String street;
    String city;
    AddressType type;
}

@Embeddable
public class AddressType {
    String name;
}

之前,它会被这样存储,例如在MongoDB中

{
    "_id" : "account-1",
    "addresses" : [
        {
            "street" : "Piazza del Colosseo, 1",
            "city" : "Rome",
            "name" : "work" <-- “flattened” representation of the nested embeddable
        },
        ...
    ]
}

而实际上它应该映射成这样

{
    "_id" : "account-1",
    "addresses" : [
        {
            "street" : "Piazza del Colosseo, 1",
            "city" : "Rome",
            “type” : {
                "name" : "work"
            }
        },
        ...
    ]
}

这是此新版本中应用的映射。请注意,您需要确保现有的记录应该已经使用此模型工作。另外,请查看迁移说明以获取详细信息。

我们不会轻率地更改此类映射,我们会尽可能地避免它们。因为这个确实是一个映射错误,我们决定尽快修复它;在将来,我们也可能在类似情况下提供兼容性选项或某种迁移工具。

支持MongoDB 3和MongoDB复制集

现在我们也支持MongoDB 3。特别是新的SCRAM-SHA-1身份验证策略现在正在工作。迁移应该很顺利。

但最大的改进是支持复制集。引用MongoDB的文档,复制集“是一组维护相同数据集的mongod进程”。通过使用复制集,您的数据被冗余存储,并通过复制集成员之间的自动故障转移来保护免受节点故障的影响。

为了支持复制集的概念,Hibernate OGM的“host”配置选项已得到增强,现在可以指定以逗号分隔的主机列表和主机:端口号元组

hibernate.ogm.datastore.host=db1.example.com,db2.example.com,db3.example.com:29019

使用此配置,Hibernate OGM将连接到三个MongoDB节点,使用默认端口号27017连接到节点db1和db2,并使用显式指定的端口号29019连接到节点db3。

目前,MongoDB后端是唯一支持多个节点的后端,但其他后端将陆续支持,例如Cassandra。

布尔映射的新内置类型

根据我们论坛中用户的要求,我们现在支持Hibernate ORM中所有已知的布尔映射类型YesNoType(映射到字符/字符串“Y”或“N”)TrueFalseType(映射到“T”或“F”)NumericBooleanType(映射到1或0)

您可以通过以下方式使用这些类型:@Type注解

// maps as boolean; default   
private boolean myBoolean;

@Type(type = "true_false")
private boolean myBoolean;

@Type(type = "yes_no")
private boolean myBoolean;

@Type(type = "numeric_boolean")
private boolean myBoolean;

对于4.2.0.CR1版本的反馈非常受欢迎。变更日志在此处详细说明了其中包含的内容。最后,一些有用的链接


返回顶部