n + 1选择一对一关系中的问题

时间:2018-03-19 07:53:18

标签: java hibernate hibernate-mapping

我的问题是当一对一关系中出现空能力时甚至我的子类主键与父类主键相同所以当在插入中插入一对一关系时插入@PrimaryKeyJoinColumn我在下面看到链接问题{{3} }

当我删除此标签时n + 1问题已解决...所以我该如何解决呢?请帮助

private SiteSecurity siteSecurity;
private SiteDetails details;
private SiteAvr avr;
private SiteRectifier rectifier;

@OneToOne( fetch = FetchType.LAZY, mappedBy = "site")
@PrimaryKeyJoinColumn
关于一对一关系的父类字段中的

    @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "site"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
    return this.id;
}

public void setId(Integer id) {
    this.id = id;
}

@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
public Site getSite() {
    return site;
}

public void setSite(Site site) {
    this.site = site;
}

这是子类,所以我如何解决问题not null和n + 1

2 个答案:

答案 0 :(得分:1)

只需在optional=true关系中设置OneToOne,例如:

@OneToOne(fetch = FetchType.LAZY, optional=true)
@PrimaryKeyJoinColumn
public Site getSite() {
    return site;
}

答案 1 :(得分:0)

为避免n + 1问题,如果站点表有一行,则确保一对一关系与其他表同步,因此其他一对一关系表对它们有一行,并且该注解@PrimaryKeyJoinColumn位于它们上。 就我而言,该策略可以避免n + 1问题