我有两个实体类,Company和CompanyTypeAutomobile。
这两个都有One-To-One关系。
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中只有基本的详细信息,而其他详细信息没有创建,而我想要获得该公司的完整详细信息,那么持久层将为我返回CompanyTypeAutomobile的EntityNotFoundException。
所以我只想创建子实体,只使用id字段。这是一个很好的实践吗?
发布于 2019-07-30 19:30:53
现在,如果创建了公司,我是否应该在相同的过程中也创建
CompanyTypeAutomobile?
这取决于子实体是否是强制的。
当您使用Company标识符加载子实体时:
CompanyTypeAutomobile details = entityManager.find(CompanyTypeAutomobile.class, company.getId());如果数据库中没有CompanyTypeAutomobile,您将获得null,而不是EntityNotFoundException。
,所以我只想创建子实体,只有id字段。这是一个很好的实践吗?
不,不是的。那将是一个黑客。
如果您得到一个EntityNotFoundException,这意味着您映射了父实体中的子关联,即a mistake。
在这种情况下,删除父Company实体中的CompanyTypeAutomobile关联,因为它将根据EAGER fetching strategy进行操作并通向N+1 query issues。
https://stackoverflow.com/questions/57252461
复制相似问题