对象建模 - REST与Hibernate

时间:2017-09-27 07:18:41

标签: json hibernate rest web-services soa

我在自己的项目中面对这个问题,但我确信这应该是一个普遍的问题。

我正在尝试使用java,spring和hibernate构建休息服务。 我的典型实体对象建模如下

@Entity
public class Company implements Serializable{
    private Long companyId;
    private String name;
    private String shortDescription;
    private Long logoId;
    private Set<ActivityType> activityTypeList;
    private String address;
    private RegistrationInfo regInfo;
}

如果一个对象与其他对象有关联,那么我的模型对象包含对关联对象的引用。 我使用带弹簧配置的jackson进行json-object和object-json转换,它工作得很好,所以直到这一点我都很好。

现在我希望我的POST调用(我用于创建对象)来创建Company对象,这里唯一的问题是我不想为包含的对象传递完整的json(如上例中的ActivityType和RegistrationInfo)每个提供id的对象已存在于数据库中的id。例如,请参阅此JSON代码段:

{
    "companyId": 5,
    "name": "test company created by rest call",
    "shortDescription": "dummy description",
    "logoId": 0,
    "activityTypeList": [
        {"activityTypeId": 1}
    ],
    "address": "202, kardoga lane, lonavala, Maharashtra",
    "regInfo": {
        "registrationInfoId": 1
    }
}

我的休息服务只需要将新创建的公司对象与提供的id(在POST调用的主体内)的现有包含对象相关联。 杰克逊序列化在这种情况下会创建无人居住的对象,这种情况不会持续存在(出于显而易见的原因,没有数据只是一个id)

当然我可以在这里使用DTO,我可以获得REST - &gt; DTO然后DTO - &gt;实体,但这似乎是一个开销,而且为了填充上面定义的Company对象,我需要首先从DB获取关联对象,将它们附加到我的公司对象然后保存回来。这将是一次不必要的数据库之旅。

有人对这个有更好的想法吗?任何设计模式,框架或简单的提示/技巧,我不需要dto以及保存数据库调用。

0 个答案:

没有答案