休眠映射:3个@OneToOne映射的效率/性能,其中两个为null

时间:2019-05-27 07:58:25

标签: hibernate spring-data-jpa

我想知道Hibernate如何使用当前的映射设置执行查询。

代码将在下面。 ConnectionManager类是父对象,我们不需要与父对象分开访问其子对象(即,我们仅使用父对象进行获取和保存)。

在ConnectionManager中,有一个@OneToOne用于emailDetail,documentDetail和sqlDetail。其中只有一个会被填充,其他两个将为null。每个“ x”详细信息还具有一个用于“ x”验证的一对多集合映射。

每个“ findOne(connectionManager id)”或“ findAll()”会为每个查询搜索整个emailDetail,documentDetail和SqlDetail表吗?好像是这样,那将是一个非常低效的查询,因为两个始终为null。我有更好的设置方法吗?

@Entity
public class ConnectionManager {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private Long controlId;

private int sequence;




public enum ValidationType {Email, Document, Sql};
@Enumerated(EnumType.STRING)
private ValidationType type;


@OneToOne(cascade = {CascadeType.ALL},orphanRemoval = true)
@JoinColumn(name = "emailDetail_id")
private EmailDetail emailDetail;

@OneToOne(cascade = {CascadeType.ALL}, orphanRemoval = true)
@JoinColumn(name = "documentDetail_id")
private DocumentDetail documentDetail;

@OneToOne(cascade = {CascadeType.ALL},orphanRemoval = true)
@JoinColumn(name = "sqlDetail_id")
private SqlDetail sqlDetail;
//getters setters

DocumentDetail

    @Entity
  public class DocumentDetail {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


@OneToMany( cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "documentDetail_id")
private List<DocumentValidation> documentValidationList;

private String location;

public DocumentDetail(){};

DocumentValidation

@Entity
public class DocumentValidation {


@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;


private String details;

其他人的关系(EmailDetail-> EmailValidation,SqlDetail-> SqlValidaton)几乎相同,只是每个类中的字段不同

0 个答案:

没有答案