우리 개발팀에는 큰 문제가있다.Hibernate는 many-to-one을 묻지 않고 검색한다.
우리는 Hibernate를 사용하고 있으며 우리는 2 개의 전 이적 일대 다 관계에 관련된 몇몇 엔티티를 가지고있다. 주 개체는 속성 인스턴스 목록이있는 그룹이며 각 속성은 값 목록을 포함합니다.
우리는 두 가지 문제가
(매핑 앞서 다운) :
A)를 HQL 쿼리, 기준 쿼리를 만들거나은 SQLQuery는이 조건이 적용 문제가되지 않는 경우이 절을 조인 또는 WHERE Hibernate는 항상 모든 기본 객체를 검색한다. 예를 들어, Criteria 나 SQL을 Group 객체 만 가져 오면 Hibernate가 나오고 (lazy 또는 not) 모든 Property 및 Value 인스턴스를 가져옵니다. 우리는 이것을 통제하기를 원합니다. 우리는 왼쪽 조인을하고 내부에 값이없는 속성 만 가져오고 싶습니다 (Hibernate는 값없이 이러한 속성을 제거합니다).
B) 쿼리를 만들 때 SQL과 같은 쿼리를 만들 때 우리는 SQL 코드 필요. 모든 것이 완벽 해 보입니다. 하지만 그 후에는 조건을 적용하지 않고 모든 인스턴스를 ID로 가져오고 lazy = "true"로 설정하면 로그에 "다 대일로드"쿼리가 표시되기 때문에이를 보장 할 수 있습니다.
최대 절전 모드 구성, 모드/전략 가져 오기, 매핑 구성 또는 다른 곳에서 수행 할 수있는 작업이 있습니까? 나는 결과 변압기에 지금가는 것을 생각하고있다.
누군가가 나에게 힌트를 주거나이 문제에 대한 해결책을 어디에서 찾을 수 있는지 말해 주시면 감사하겠습니다. 우리는 이것을 얻는 방법에 대해 혼란 스럽지만 방법이어야합니다. 사전에
감사
검색어 :
Criteria lstCriterios = this.getSession().createCriteria(CardGroup.class, CARD_GROUP)
.add(Restrictions.eq(ID_CATEGORY, idCategory));
lstCriterios.createAlias("listProperty", "listProperty", CriteriaSpecification.LEFT_JOIN);
if (clusterId != null) {
lstCriterios.add(Restrictions.or(
Restrictions.isNull("listPropertyValue" + ".value"),
Restrictions.and(Restrictions.eq("listPropertyValue" + ".clusterId", clusterId),
Restrictions.eq("listPropertValue" + ".companyWarehouseId", idCompanyWarehouse))));
lstCriterios
.createAlias("listProperty" + "." + "listPropertyValue", "listPropertyValue",
CriteriaSpecification.LEFT_JOIN,
Restrictions.eq("listPropertyValue" + ".clusterId", clusterId));
} else {
lstCriterios.createAlias("listProperty" + ".listPropertyValue", "listPropertyValue",
CriteriaSpecification.LEFT_JOIN);
}
lstCriterios.add(Restrictions.eq(ID_CATEGORY, idCategory));
lstCriterios.add(Restrictions.eq("listProperty" + ".groupId", idGroup));
lstCriterios.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
/*
* Sorting
*/
lstCriterios.addOrder(Order.asc("order"));
lstCriterios.addOrder(Order.asc("listProperty" + ".order"));
lstCriterios.addOrder(Order.asc("listPropertyValue"+ ".clusterId")); // Agrupacion, podría ser nulo
lstCriterios.addOrder(Order.asc("listPropertyValue"+ ".propertyId")); // Propiedad
lstCriterios.addOrder(Order.asc("listPropertyValue"+ ".id"));
return lstCriterios.list();
그룹 매핑 :
<list name="listProperty"
table="FICHA_PROPIEDAD" schema="${db2.siglo.schema}"
inverse="false" cascade="all" >
<key column="ID_FICHA_GRUPO" not-null="false" />
<list-index column="ORDEN" base="1"/>
<one-to-many
class="com.company.aslo.appwebsiglo.model.card.property.property.CardProperty" />
</list>
속성 매핑 : 우리의 모델 설계가 나쁜와 같은
<bag name="listPropertyValue"
table="FICHA_PROPIEDAD_VALOR" schema="${db2.siglo.schema}"
inverse="false" cascade="all">
<key column="ID_FICHA_PROPIEDAD" not-null="false" />
<one-to-many
class="com.company.aslo.appwebsiglo.model.card.propertyvalue.propertyvalue.CardPropertyValue" />
</bag>
노력하고있는 기준/HQL 쿼리를 게시 할 수 있습니까? – Shane
목록에서 lazy = true를 사용하려고 했습니까? – Zeus
예, 했어요. 아무것도 바뀌지 않습니다. – madtyn