Каков наилучший способ обработки ревизии аудита в объекте отношения «многие к одному» в окружении Hibernate?

У меня есть две сущности 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, все значения вставляются со значением null из-за BusinessUnitPartnerMap.

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


person vikram singh    schedule 06.02.2020    source источник
comment
загружается только идентификатор бизнес-подразделения и название подразделения. Я не уверен, что понимаю, что вы имеете в виду. Вам нужно добавить соответствующий код, который загружает, изменяет и сохраняет сущность.   -  person Alan Hay    schedule 06.02.2020


Ответы (1)


Насколько я понимаю, вы поддерживаете отношения @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;
}

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

person Tatiana Didik    schedule 06.02.2020