连接实体中另一张表中的另一列

时间:2019-04-17 19:14:21

标签: java hibernate jpa crud

我在为大数据服务创建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建模这样的概念?我很高兴提出任何建议。 谢谢!

0 个答案:

没有答案