문제

다음과 같은 모습을 보이는 최대 절전 모드 매핑이 있습니다.

<class name="MyEntity">
  <set name="scalarSet" table="(select fk, scalar_value from other_table)">
    <key column="fk"/>
    <property column="scalar_value" type="long"/>
  </set>
</class

이를 감안할 때, myentity.scalarset (설정된)의 값이 다른 컬렉션에 있도록 어떻게 쿼리합니까?

같은 것 :

criteria.add(Restrictions.in("scalarSet", targetList));

편집] 제한을 시도했습니다 .SQLRESTRICTION (..). 내가 사용한 SQL 쿼리는 다음과 같습니다.

"1 == (select fk, scalar_value from other_table where fk = {alias}.id and scalar_value in ({expanding?})"

여기서 '{확장?}'는 쉼표로 구분 된 물음표로 대체됩니다 (TargetList.size ()에 따라).

하지만 난 그냥 받고 있어요

원인 : org.hibernate.mappingexception : 컬렉션은 연관성이 아닙니다 : myentity.scalarset

도움이 되었습니까?

해결책

귀하의 세트는 협회 매핑이 아닌 컬렉션입니다. 미묘하지만 중요한 차이점이 있습니다. 컬렉션에 Hibernate의 쿼리 API를 사용하는 것이 현재입니다 지원되지 않습니다.

예를 들어 다음과 같이 HQL을 사용하거나 일대일 협회 매핑을 사용해야합니다.

public class Scalar {
  private Long value;
  public Long getValue() { .... }
  public void setValue(....) { ....}
}

다른 팁

그러나 누군가는 a 반점 최대 절전 모드 3.4에서 끝나지 않을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top