Каков наилучший способ обработки аудита в объекте отношения «многие к одному» в Hibernate Envers? - PullRequest
1 голос
/ 06 февраля 2020

У меня есть две сущности BusinessUnit. java и BusinessPartner. java И у меня есть объединяемая сущность BusinessUnitPartnerMap. java

@Entity
@Audited
public class BusinessUnit {

private int id;
private String unitName;
private String description;
private String status;

@OneToMany(mappedBy = "businessPartner", cascade = CascadeType.ALL, orphanRemoval = true)
private List<BusinessPartnerUnitMap> businessPartnerUnitMaps;

}


@Entity
@Audited
public class BusinessPartner {

private int id;
private String partnerName;
private String details;
private String status;

@OneToMany(mappedBy = "businessPartner", cascade = CascadeType.ALL, orphanRemoval = true)
private List<BusinessPartnerUnitMap> businessPartnerUnitMaps;

}

@Entity
@Audited
public class BusinessPartnerUnitMap {

 private int businessPartnerUnitMapId;

 @ManyToOne
 @JoinColumn(name = "business_partner_id")
 private BusinessPartner businessPartner;

 @ManyToOne
 @JoinColumn(name = "business_unit_id")
 private BusinessUnit businessUnit;

}

При обновлении BusinessPartner я использую BusinessUnit DAO и загружаю только идентификатор бизнес-единицы и имя-единицы.

В результате business_unit_aud таблица, кроме id и unitName, все значения вставляются в ноль из-за BusinessUnitPartnerMap .

Есть ли способ вставить данные в таблицу business_unit_aud без загрузки BusinessUnit объект на момент обновления BusinessPartner ?

1 Ответ

0 голосов
/ 06 февраля 2020

Насколько я понимаю, вы поддерживаете отношения @ManyToMany. Если вы переключитесь на

@Entity
@Audited
public class BusinessPartner {
    @ManyToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
        @JoinTable(
            name = "BusinessUnit", 
            joinColumns = { @JoinColumn(name = "business_partner_id") }, 
            inverseJoinColumns = { @JoinColumn(name = "business_unit_id") 
    })
    private List<BusinessPartnerUnit> businessPartnerUnits;
}

При инициализации Lazy, вам не нужно загружать ссылочные данные, и они не будут заменены нулями; и @ManyToMany позволит вам сохранить отношения без дополнительной сущности. Если это не поможет, мне нужно знать, как загружать объекты в BusinessUnitDAO

...