Java:JPA / JSON / REST往返工作流程

时间:2013-12-30 11:56:16

标签: java json rest jpa mapping

我正在寻找一个执行以下操作的java“工作流程”:

  1. 从数据库中获取对象
  2. 将其序列化为json
  3. 把它拿回来
  4. 更新数据库
  5. 这必须是“普通的”Java。我的意思是没有像Spring或Seam那样的完整堆栈框架。

    目前我正在使用MySQL / JPA / Hibernate进行ORM,使用Jackson进行JSON映射,并在客户端使用AngularJS。

    对于简单的物体来说,这一切都很好。但随着对象变得越来越复杂,我发现自己编写了越来越多的映射代码。

    例如,考虑这个(简化的)对象:

    class Website {
        long id;
        String name;
        List<Domain> domains;
    }
    class Domain {
        long id;
        String url;
        Set<String> countries;
    }
    

    将映射到三个表:WebsiteDomainCountry

    杰克逊做得很好,将其序列化为一些想法(再次简化):

    {
        id: 1,
        name: "My Website"
        domains: [ {
            id: 1,
            url: "www.mysite.de",
            countries: [ "de" ]
        }, {
            id: 2,
            url: "www.mysite.com",
            countries: [ "uk", "us" ]
        } ]
    }
    

    Angular可以很好地处理。

    但是在客户端使用它之后我可能会在POST请求中得到它:

    {
        id: 1,
        name: "My Website"
        domains: [ {
            id: 1,
            url: "www.mysite.de",
            countries: [ "de", "at", "ch" ]
        }, {
            url: "www.mysite.co.uk",
            countries: [ "uk" ]
        }, {
            url: "www.mysite.us",
            countries: [ "us" ]
        } ]
    }
    

    这可以通过Jackson映射到相应的Java对象,但未存储以这种形式存储在数据库中。

    现在我必须开始“分析”创建的java对象并且:

    1. 获取正确的旧对象
    2. 将新对象的数据复制到旧对象中并进行处理:
    3. 删除不再存在的子对象
    4. 更新已更改的内容
    5. 插入新的
    6. 然后将其合并回数据库
    7. 随着对象变大并包含更多更深的参考链而变得非常混乱。

      那么有更好的手动更新数据库对象的方法吗?或者有没有提供帮助的工具?

      提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您使用NoSQL数据库(如MongoDB),您只需将Jackson生成的POJO存储到数据库中并查询/检索它。

如果没有,那么只需设置你的Jackson注释就可以将JSON中的字段映射到不同的Java,或者你的hibernate映射以不同的方式映射从Java到数据库,并以这种方式匹配所有内容。

如果你真的无法以这种方式工作,那么就拥有“客户端”对象和“服务器端”对象 - 然后为每个对象提供一个构造函数,从另一个构建它。

然后你可以这样做:

ClientFoo in = ...;
ServerFoo serverIn = new ServerFoo(in);
// Save to database



// Later
serverFoo out = ...;
ClientFoo clientOut = new ClientFoo(out);
// Send to client.

这至少将所有数据映射代码保存在一个地方,并将其与其他所有内容进行封装。

相关问题