我正在寻找一个执行以下操作的java“工作流程”:
这必须是“普通的”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;
}
将映射到三个表:Website
,Domain
,Country
杰克逊做得很好,将其序列化为一些想法(再次简化):
{
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对象并且:
随着对象变大并包含更多更深的参考链而变得非常混乱。
那么有更好的手动更新数据库对象的方法吗?或者有没有提供帮助的工具?
提前致谢!
答案 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.
这至少将所有数据映射代码保存在一个地方,并将其与其他所有内容进行封装。