다음 두 엔티티가 @OneToMany와 @ManyToOne 인 양방향 관계로있다. 아래 그림과 같이 Join 쿼리를 사용하여 하위 쿼리를 쿼리하면 각 MinuteData (Child 테이블)에 대해 StandardDimension (Parent) 테이블이 @ManyToOne 관계를로드하도록 자동으로 쿼리합니다 (지연로드로 표시되어 있음에도 불구하고). 이로 인해 DB 성능 문제가 발생합니다. 이 문제를 해결할 수 있도록 도와 주시겠습니까? MinuteData마다 표준 측정 기준 레코드가로드되지 않습니까? JPA 2.0과 hibernate-core-4.1.1을 사용하고 있습니다. 최종. 어떤 도움이라도 대단히 감사하겠습니다. 최대 절전 모드에서 StandardDimension 개체를로드하지 못하게하는 방법은 무엇입니까?JPA Hibernate Lazy 로딩이 예상대로 작동하지 않는다.
@Query("SELECT md FROM StandardDimension sd ,MinuteData md where sd.dimensionAK = md.dimensionFK and sd.app = :applicationId and md.timeBucket between :startTime and :endTime ")
public List<MinuteData> findMinuteDataByTimeBucket(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("applicationId") String applicationId);
@Entity (name="StandardDimension")
@Table (name="STANDARD_DIMENSION")
public class StandardDimension implements Serializable {
@OneToMany (targetEntity=MinuteData.class, fetch=FetchType.LAZY, mappedBy="dimensionFK", cascade=CascadeType.REMOVE)
private Set<MinuteData> muniteDateDimensionViaFK = new HashSet<MinuteData>();
}
@Entity (name="MinuteData")
@Table (name="MINUTE_DATA")
public class MinuteData implements Serializable {
........
@ManyToOne (fetch=FetchType.LAZY)
@JoinColumn(name="DIMENSION_FK", referencedColumnName = "DIMENSION_AK", nullable=false , unique=false , insertable=true, updatable=true)
private StandardDimension dimensionFK;
.........
}
Here is SQL Statement form console:
Hibernate:
select
minutedata1_.minute_data_pk as minute1_1_,
minutedata1_.created_date as created2_1_,
minutedata1_.data_obj as data3_1_,
minutedata1_.dimension_fk as dimension6_1_,
minutedata1_.modified_date as modified4_1_,
minutedata1_.time_bucket as time5_1_
from
standard_dimension standarddi0_,
minute_data minutedata1_
where
standarddi0_.dimension_ak=minutedata1_.dimension_fk
and standarddi0_.app=?
and (
minutedata1_.time_bucket between ? and ?
)
Hibernate:
select
standarddi0_.standard_dimensions_pk as standard1_2_0_,
standarddi0_.app as app2_0_,
standarddi0_.created_date as created3_2_0_,
standarddi0_.data_center as data4_2_0_,
standarddi0_.dimension_ak as dimension5_2_0_,
standarddi0_.env as env2_0_,
standarddi0_.last_seen as last7_2_0_,
standarddi0_.modified_date as modified8_2_0_,
standarddi0_.server as server2_0_,
standarddi0_.app_version as app10_2_0_
from
standard_dimension standarddi0_
where
standarddi0_.dimension_ak=?
엔티티의 getter setter를 확인 했습니까? 일부 자식 엔티티가 관련된 접근 자 메서드의 논리에서 select 문이 발생하는 경우가 있습니다. –
엔티티를 두 번 확인했는데 부모 (StandardDimension)에 액세스하는 hashcode 또는 equals 메서드가 없습니다. 내가 확인해야 할 다른 것이 있으면 알려줘. – Bmis13
안녕하세요 @ Bmis13, 거의 3 년이되었지만이 문제에 대한 해결책을 찾았는지 알고 싶었습니까? – jon