ProgramingTip

Hibernate 기준 : 매핑 된 연관없이 테이블 결합

bestdevel 2020. 11. 4. 08:13
반응형

Hibernate 기준 : 매핑 된 연관없이 테이블 결합


Hibernate API를 사용하여 두 가지를 기준으로하는 특정 쿼리를 공식화하고 싶습니다. 두 개의 개는, 애완 동물 및 소유자가있는 소유자가 많은 애완 동물을 가지고있는 가정 해 보겠습니다. 그러나 결정적으로 연관은 Java 주석 또는 xml에 매핑되지 않습니다.

hql을 사용하여 쿼리에 조인을 대신하여 'fido'라는 애완 동물이있는 대신 선택할 수 있습니다 (소유자 클래스에 애완 동물 집합을 추가하는 대신 지정 가능).

최대 대역폭을 사용하여 동일한 작업을 수행 할 수 있습니까? 어떻게 어떻게?

고마워, J


내 이해는 HQL을 사용하여이 작업을 수행하면 내부 조인이 아닌 필터를 사용하여 데카르트 조인을 만드는 것입니다. 기준 쿼리는이 작업을 지원하지 않습니다.


이 기준으로 실제로 가능합니다.

DetachedCriteria ownerCriteria = DetachedCriteria.forClass(Owner.class);
ownerCriteria.setProjection(Property.forName("id"));
ownerCriteria.add(Restrictions.eq("ownername", "bob"));

Criteria criteria = getSession().createCriteria(Pet.class);
criteria.add(Property.forName("ownerId").in(ownerCriteria));

업데이트 : 실제로 조인 대신 하위 쿼리를 수행하지만 최대 제외 관계가 정의되지 않은 두 엔터티에 기준을 사용할 수 있습니다.


NHibernate에서는 DetachedCriteria로 정의 된 하위 쿼리를 사용할 수 있습니다. Java에서 대부분 동일하게 작동하는지 확실하지 않습니다.

DetachedCriteria pets = DetachedCriteria.For<Pet>("pet")
  .SetProjection(Projections.Property("pet.ownername"))
  .Add(/* some filters */ );

session.CreateCriteria(typeof(Owner))
  .Add(Subqueries.PropertyIn("name", pets);

소유자의 이름을 사용하여 사용자 정의 가정합니다.


Criterion ownerCriterion = Restrictions.sqlRestriction(SELECT ownerId FROM   Owner WHERE ownerName ='bob');
Criteria criteria = getSession().createCriteria(Pet.class);
criteria.createCriteria("ownerId").add(ownerCriterion);

있다 SQLCriterion당신이 임의 줄 수있는 SQL, 그리고 추가 Criteria. 에서 SQL토큰 토큰 {별명} "루트는 별명으로 대체됩니다."

참고 URL : https://stackoverflow.com/questions/720502/hibernate-criteria-joining-table-without-a-mapped-association

반응형