首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当它们之间存在一对一的JPA关系时,是否可以将子实体与父实体一起持久化?

当它们之间存在一对一的JPA关系时,是否可以将子实体与父实体一起持久化?
EN

Stack Overflow用户
提问于 2019-07-29 19:02:15
回答 1查看 121关注 0票数 0

我有两个实体类,CompanyCompanyTypeAutomobile

这两个都有One-To-One关系。

代码语言:javascript
运行
复制
public class Company {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    @Column(name = "company_id", unique = true, nullable = false)
    private Integer companyId;

    @Column(name = "name", length = 255, updatable = false)
    @NotEmpty
    private String name;

    private CompanyType companyType;

    //other fields

}

public class CompanyTypeAutomobile {

    @Id
    private Integer id;

    @JsonIgnore
    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    @JoinColumn(name = "company_id")
    private Company company;

}

Company包含公司的基本信息,其他字段将包含在其子实体中(根据公司的类型),如果创建了Company,我是否应该在相同的过程中也创建CompanyTypeAutomobile

在这种情况下,我有一个要求。如果对于某些公司,它在Company中只有基本的详细信息,而其他详细信息没有创建,而我想要获得该公司的完整详细信息,那么持久层将为我返回CompanyTypeAutomobileEntityNotFoundException

所以我只想创建子实体,只使用id字段。这是一个很好的实践吗?

EN

回答 1

Stack Overflow用户

发布于 2019-07-30 19:30:53

现在,如果创建了公司,我是否应该在相同的过程中也创建CompanyTypeAutomobile

这取决于子实体是否是强制的。

当您使用Company标识符加载子实体时:

代码语言:javascript
运行
复制
CompanyTypeAutomobile details = entityManager.find(CompanyTypeAutomobile.class, company.getId());

如果数据库中没有CompanyTypeAutomobile,您将获得null,而不是EntityNotFoundException

,所以我只想创建子实体,只有id字段。这是一个很好的实践吗?

不,不是的。那将是一个黑客。

如果您得到一个EntityNotFoundException,这意味着您映射了父实体中的子关联,即a mistake

在这种情况下,删除父Company实体中的CompanyTypeAutomobile关联,因为它将根据EAGER fetching strategy进行操作并通向N+1 query issues

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57252461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档