我在为大数据服务创建CRUD REST API时遇到以下问题。我将问题简化为一个具体的简化示例:
我有两个相关的JPA实体:
@Entity
class Address {
@Id
Long id;
// 100 other fields
@Column // references Entity organization by ID
Long organizationId;
}
@Entity
class Organization {
@Id
Long id;
@Column
String name;
// 100 other fields
}
在数据库级别,两个实体都通过外键(地址参考组织,通过字段organizationId)连接。为了使POJO对消费者而言较小,我不想在实体之间建立@ManyToOne JPA关系。但是,为了使它在REST消费者方面“易于阅读”,我不仅希望看到organizationId,还希望看到Address对象中的名称。例如。像这样的最小对象概念:
@Entity
class Address {
@Id
Long id;
// 100 other fields
@ ???
MinimalObject organization;
}
@Entity
class Organization { same as above }
class MinimalObject {
Long id;
String name;
static MinimalObject of(Entity e) {
return new MinimalObject(e.getId(), e.getName());
}
}
最小对象仅提供ID和名称即可代表模型中的任何实体,JPA最好在读取地址对象时通过INNER JOIN直接初始化MinimalObject。
使用这种方法,REST客户端可以查看地址组织的高级信息(ID和名称),并且如果用户对完整的组织对象感兴趣,则可以通过组织的GetById检索它控制器/ Dao。组织控制器还提供了获取所有最小对象的请求。
使用此概念,getAllAddresses调用将忽略将n次(地址计数)相同无趣的100个其他Organization字段传输给客户端,例如以获得列表视图。
在更新或删除外部表(组织)的情况下,当然保持不变,只有地址中的OrganizationId可能会被更新。
在我的模型中,我有数百个这样的子对父关系,所以我正在寻找通用的解决方案。
任何想法如何用JPA建模这样的概念?我很高兴提出任何建议。 谢谢!