当前位置: 首页 > 知识库问答 >
问题:

我在一个实体中有多个单域映射。Hibernate加载第一个对象,即使我没有请求该对象。这是预期的行为吗?

长孙燕七
2023-03-14

药性:

@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;
}

便利性:

@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
@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 over我的列表结果时,它会自动触发查询来加载设施。

生成的日志:

Hibernate:选择医疗用品0_。med_area_id为med_area1_1_,medicalent0 _。med_area_cd as med_area2_1_,medicalent0 _等。area _ nm as area _ nm3 _ 1 _ from t _ med _ area medicalent 0 _

2020-02-11 15:26:01.377 TRACE 39096---[nio-8080-exec-2]o.s.t.i.TransactionInterceptor:完成[org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll] 2020-02-11 15:26:01.383 TRACE 39096---[nio-8080-exec-2]的事务。s.t.s.TransactionSynchronizationManager:从线程[超文本传输协议-nio-8080-exec-2]中删除密钥[公共摘要java.util.Listorg.springframework.data.jpa.repository.JpaRepository.findAll()]的值[org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$DefaultCrudMethodMetadata@2930e0de]

Hibernate:选择z0_med_area_idmed_area6_0_0_z0_idid1_0_0_z0_idid1_0_1_z0_facility_codefacility2_0_1_z0_facility_idfacility3_0_1_z0_facility_nmfacility4_0_1_z0_insert_dtinsert_d5_0_1_z0_med_area_idmed_area6_0_1_t_facilityz0_z0_med_area_id=?

Hibernate:选择z0_med_area_idmed_area6_0_0_z0_idid1_0_0_z0_idid1_0_1_z0_facility_codefacility2_0_1_z0_facility_idfacility3_0_1_z0_facility_nmfacility4_0_1_z0_insert_dtinsert_d5_0_1_z0_med_area_idmed_area6_0_1_t_facilityz0_z0_med_area_id=?

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 作为t_facility z0_med_area6_0_1_,其中 z0_.med_area_id=?。

我的问题是:为什么它获取设施实体的细节?我没有明确地进行任何调用来获取FacilityEntity的属性。

共有1个答案

轩辕佑运
2023-03-14

你说的“悬停”是指在调试时?如果您检查任何惰性元素,它类似于访问它们,因此hibernate将尝试惰性加载实体。

 类似资料:
  • 如何使用MapSTRt创建映射器,从模型实体,包括一个对象列表和另一个对象到域实体,只包括嵌套对象的列表。 我的模型实体列表对象=SourceObject-A; 我的模型实体第二个对象=SourceObject-B; 我的Doamin实体列表对象=目标对象AB; 我的源代码类如下所示: SourceObject-A: SourceObject-B: 所以我需要将其转换为这个(TargetObjec

  • 当我映射同一个实体时,就像这里回答的那样: Hibernate与同一实体的多对多关联 在“tbl_friends”表中,我有相同含义的行。例如,我有id=1的用户和id=2的用户。在“tbl_friends”表中,当他们作为朋友链接时,我有两行 使用Hibernate或JPA引用是否可以在一行(1-2或2-1)中建立这种关系?

  • org.springframework.beans.factory.NosuchBeanDefinitionException:没有找到与依赖项[map with value type java.lang.String]匹配的类型[java.lang.String]的bean:需要至少1个bean作为此依赖项的autowire候选项。 我尝试将键和值类型显式声明为,但没有效果。你知道我可能做错了什

  • 问题内容: 我正在尝试设计一个非常简单的应用程序,并使自己与Hibernate的实体和值对象的定义(在Java Persistence with Hibernate的第4章中定义)有些困惑。 我所拥有的是带有客户的应用程序,可以下订单(一对多关系)。这些订单中的每一个都有许多订单行(也是一对多)。现在,我认为客户具有身份(客户编号),订单(订单编号)也是如此,因此它们是实体对象吗?我的困惑来自订单

  • 问题内容: 我只是想知道… 为什么我只有一个Calendar对象实例。有一个单例的原因吗? 我试图阅读文档,但他们没有提及为什么需要这样做。快速谷歌搜索没有给我任何答案。 问题答案: 日历不是单例,它是一个抽象类。该方法是一个Factory方法,它返回Calendar类的具体实现。 在Google上搜索java.util.Calendar源代码,您将看到它的工作方式。

  • 问题内容: 在我目前正在从事的一个项目中,我遇到了一个角度异常: 在寻找解决方案的搜索中,我直接在浏览器中输入了Web服务的URL,但令人惊讶的是,我没有收到预期的数组。 Web服务类: 当我输入网址时,我希望看到带有JSON对象的JSON数组: 但是,相反,我收到的JSON对象的属性与我期望的JSON对象相同,没有任何数组: 所以我想知道为什么没有数组,当我添加另一个Clazz对象时会发生什么。