5

在 Rails 中,我们有一个serialize方法,它接受一个属性(或列),当保存在数据库中时,该属性(或列)将自动序列化为 json。

保存并查询该对象后,可以将对象序列化的 json 作为真实的类属性进行访问。

我的问题是:是否有任何内置或包可以将此功能添加到休眠?如果是否定的,是否可以使用反射 java api 动态创建属性?

我对此提出质疑是因为我对学习一点 Java 以及你可以用 JVM 做什么很感兴趣。

谢谢。

4

4 回答 4

4

我真的不明白你想要什么,对不起。

但是,如果您想要一个对象的字段,其值以单列中的序列化形式保存到数据库中,而不是映射到另一个表中的行的引用,那么这是 JPA 的标准部分。您只需定义一个字段,然后不要使用关系注释对其进行注释。我相信该字段的类型必须是 的子类型Serializable,但(遗憾的是)。例如:

@Entity
public class Colleague {
    @Id
    private int id;
    private HashMap<Date, String> diary;
}

这将映射到这样的表:

create table Colleague (
    id integer primary key,
    diary blob
)

现在,您提到了 JSON。这不会使用 JSON;它将使用标准的 Java 序列化。我认为没有什么特别理智的方法可以让它使用 JSON 来代替。最简单的可能是将要序列化的对象包装在 JSONifying 包装器中。不是太难,但有点奇怪。

尽管如此,即使这不是 JSON,它的用处也大致相同:数据进入数据库,然后返回。

再说一次,不知道这是否真的是你想要的,对不起!

于 2012-11-12T19:25:58.950 回答
3

您可以使用现有的 JSON 库(如 Jackson 或 Gson)为此编写自己的自定义用户类型。

  1. jackson-hibernate-module:基于 Jackson 的预先存在的库。支持延迟加载的概念
  2. 创建自定义 JSON 用户类型。
于 2012-11-12T18:13:04.790 回答
0

我认为,您可以为此使用Gson库。它允许您序列化和反序列化 json 对象或 java 对象。

对于 XML 文件,您可以使用XStream库。

于 2012-11-12T18:14:40.497 回答
0

我不认为 Hibernate 有这样的工具。但我看到了两种模拟这种行为的方法

  1. 在您的实体中使用 JPA @PrePersit 方法并使用 Json 库重新呈现值
  2. 在您的实体方法上使用一些 AOP 并以相同的方式重新渲染
于 2012-11-12T18:21:28.937 回答