У меня есть несколько сопоставлений OneToMany в сущности. Hibernate загружает первый, даже если я не запрашиваю этот объект. Это ожидаемое поведение? - PullRequest
0 голосов
/ 12 февраля 2020

MedicalEntity:

@Entity
@Table(name="t_med_area")

public class MedicalEntity {


@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="med_area_id")
private Integer med_area_id;


@Column(name="med_area_cd")
private String area_code;

@Column(name="area_nm")
private String area_description;

@OneToMany(fetch = FetchType.LAZY,mappedBy="medical_area_id")
private List<ProviderEntity> resources;


@OneToMany(fetch = FetchType.LAZY,mappedBy="medAreaId")
private List<FacilityEntity> facility;



public List<ProviderEntity> getResources() {
    return resources;
}

public void setResources(List<ProviderEntity> resources) {
    this.resources = resources;
}

public List<FacilityEntity> getFacility() {
    return facility;
}

public void setFacility(List<FacilityEntity> facility) {
    this.facility = facility;
}

public Integer getMed_area_id() {
    return med_area_id;
}

public void setMed_area_id(Integer med_area_id) {
    this.med_area_id = med_area_id;
}

public String getArea_code() {
    return area_code;
}

public void setArea_code(String area_code) {
    this.area_code = area_code;
}

public String getArea_description() {
    return area_description;
}

public void setArea_description(String area_description) {
    this.area_description = area_description;
}

FacilityEntity:

@Entity
@Table(name="t_facility")

public class FacilityEntity implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private Integer id;

@Column(name="facility_id")
private int facilityId;

@Column(name="facility_nm")
private String facilityName;

@Column(name="facility_code")
private String facilityCode;


@OneToMany(fetch = FetchType.LAZY,mappedBy="facility_id")
private List<ProviderEntity> resources;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="med_area_id")
private MedicalEntity medAreaId;

@Column(name="insert_dt")
private Date insertDt;



public Integer getId() {
    return id;
}

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

public int getFacilityId() {
    return facilityId;
}

public void setFacilityId(int facilityId) {
    this.facilityId = facilityId;
}

public String getFacilityName() {
    return facilityName;
}

public void setFacilityName(String facilityName) {
    this.facilityName = facilityName;
}

public String getFacilityCode() {
    return facilityCode;
}

public void setFacilityCode(String facilityCode) {
    this.facilityCode = facilityCode;
}

public List<ProviderEntity> getResources() {
    return resources;
}

public void setResources(List<ProviderEntity> resources) {
    this.resources = resources;
}

public MedicalEntity getMedAreaId() {
    return medAreaId;
}

public void setMedAreaId(MedicalEntity medAreaId) {
    this.medAreaId = medAreaId;
}

public Date getInsertDt() {
    return insertDt;
}

public void setInsertDt(Date insertDt) {
    this.insertDt = insertDt;
}


public FacilityEntity(Integer id, String facility_name, String facility_code) {
    super();
    this.id = id;
    this.facilityName = facility_name;
    this.facilityCode = facility_code;
}

public FacilityEntity() {
    super();
}

}

Поставщик Entity:

@Entity
@Table(name="t_provider")
public class ProviderEntity implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="provider_id")
private Integer provider_id;

@Column(name="resource_cd")
private String resource_code;

@Column(name="first_nm")
private String first_name;

@Column(name="last_nm")
private String last_name;

@Column(name="middle_nm")
private String middle_name;

@Column(name="title_nm")
private String title;

@Column(name="department_nm")
private String department_name;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="home_med_area_id")
private MedicalEntity medical_area_id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="home_facility_id")
private FacilityEntity facility_id;


public Integer getProvider_id() {
    return provider_id;
}

public void setProvider_id(Integer provider_id) {
    this.provider_id = provider_id;
}

public String getResource_code() {
    return resource_code;
}

public void setResource_code(String resource_code) {
    this.resource_code = resource_code;
}

public String getFirst_name() {
    return first_name;
}

public void setFirst_name(String first_name) {
    this.first_name = first_name;
}

public String getLast_name() {
    return last_name;
}

public void setLast_name(String last_name) {
    this.last_name = last_name;
}

public String getMiddle_name() {
    return middle_name;
}

public void setMiddle_name(String middle_name) {
    this.middle_name = middle_name;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDepartment_name() {
    return department_name;
}

public void setDepartment_name(String department_name) {
    this.department_name = department_name;
}

public MedicalEntity getMedical_area_id() {
    return medical_area_id;
}

public void setMedical_area_id(MedicalEntity medical_area_id) {
    this.medical_area_id = medical_area_id;
}

public FacilityEntity getFacility_id() {
    return facility_id;
}

public void setFacility_id(FacilityEntity facility_id) {
    this.facility_id = facility_id;
}

public ProviderEntity() {
    super();

}

}

Сервисный уровень:

    List<MedicalEntity> result=medicalAreaRepository.findAll();


    //transforming entity into DTO and setting properties based on UI requirements
    for(MedicalEntity medicalEntity:result)
    {

        MedicalDTO medicalDTO=new MedicalDTO();
        medicalDTO.setArea_code(medicalEntity.getArea_code());
        medicalDTO.setArea_description(medicalEntity.getArea_description());
        medicalDTO.setId(medicalEntity.getMed_area_id());
        //System.out.println(medicalEntity.getResources());
        medicalResponse.addElementsToList(medicalDTO);
    }

Когда я вызываю hover поверх моего результата List, он автоматически запускает запрос для загрузки объектов.

Журналы, которые генерируются:

Hibernate : выберите medicalent0_.med_area_id в качестве med_area1_1_, medicalent0_.med_area_cd в качестве med_area2_1_, medicalent0_.area_nm в качестве area_nm3_1_ из t_med_area medicalent0_

2020-02-11 15: 26: 01.380-ru-n-TRACE 39: 0969: TRACE 39 1033 * -2] ostiTransactionInterceptor: завершение транзакции для [org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll] 2020-02-11 15: 26: 01.383 TRACE 39096 --- [nio-8080-exe c -2] .stsTransactionSynchronizationManager: Удалено значение [org.springframework.data.jpa.repository.support. CrudMethodMetadataPostProcessor$DefaultCrudMethodMetadata@2930e0de] для ключа [publi c abstract java .util.List org.springframework.data.jpa.repository .JpaRepository.findAll ()] из потока [http-n IO-8080-EXE c -2]

Спящий режим: выберите z0_.med_area_id, как med_area6_0_0_, z0_.id, как id1_0_0_, z0_.id, как id1_0_1_, z0_.facility_code, как facility2_0_1_, z0_.facility_id, как facility3_0_1_, z0_.facility_nm в facility4_0_1_, z0_.insert_dt как insert_d5_0_1_, z0_.med_area_id как med_area6_0_1_ из t_facility z0_ где z0_.med_area_id =

1027 * Hibernate: выберите z0_.med_area_id в med_area6_0_0_, z0_.id в id1_0_0_, z0_.id в id1_0_1_, z0_.facility_code как facility2_0_1_, z0_.facility_id как facility3_0_1_, z0_.facility_nm как facility4_0_1_, z0_.insert_dt как insert_d5_0_1_, z0_.med_area_id как med_area6_0_1_ из t_facility z0_ где z0_.med_area_id = 1029 * Hibernate: выбрать z0_.med_area_id, как med_area6_0_0_, z0_.id как id1_0_0_, z0_.id как id1_0_1_, z0_.facility_code как facility2_0_1_, z0_.facility_id как facility3_0_1_, z0_.facility_nm как facility4_0_1_, z0_.insert_dt как insert_d5_0_1_, z0_.med_area_id как med_area6_0_1_ от t_facility z0_ где z0_.med_area_id =?. * 10 31 * У меня вопрос: почему он выбирает детали FacilityEntity? Я не делаю явных вызовов для получения свойств FacilityEntity.

1 Ответ

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

Когда вы говорите «зависание», вы имеете в виду при отладке? Если вы осмотрите какой-либо из ленивых элементов, сродни доступу к ним, hibernate попытается лениво загрузить объект.

...