문제

특정 회사와 관련된 모든 정의와 관련된 속성을 검색하는 외부 조인 쿼리를 만들어야합니다.

두 개의 최대 절전 모드 모델 객체가 있습니다.

class PropertyDefinition {
    @Id
    private Long id;

    @Column
    private String name;

    @OneToMany(mappedBy = "propertyDefinition")
    private Set<Property> properties = new HashSet<Property>();
}

class Property {
   @Id
   private Long id;

   @ManyToOne
   private Integer companyId;

   @ManyToOne
   private PropertyDefinition propertyDefinition;
}

따라서 쿼리는 다음과 같습니다.

from PropertyDefinition as pd left join pd.properties as props with props.companyId = :companyId

그래서 지금까지는 모두 복숭아입니다. 내가 가진 문제는 반환 된 데이터를 어떤 구조에 저장합니까? Hibernate는 [0]이 속성 정의 (절대 널이되어서는 안된다)이고 [1]은 null 속성 일 수있는 목록을 반환합니다.

내 문제 :

  • 그것의 불쾌하고 객체 [] s 목록을 둘러 보는 것은 불쾌하고 친절하지 않습니다.
  • 보유한 속성 목록이 회사에만 국한되지 않기 때문에 Property Definition을 보유 할 수는 없습니다.
  • PropertyDefinition과 Null 속성에 대한 참조를 보유한 간단한 객체를 만들 수 있지만 전체 목록을 반복 하고이 새로운 객체에 넣어야합니다.

누구든지 더 나은 쿼리 또는 더 나은 매핑 구조에 대한 제안이 있습니까? 도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

글쎄, 일반적으로 컬렉션에 가입하는 것은 술책 인구가있는 컬렉션이있는 컨테이너 객체 목록을 반환합니다. 그러나 사용하기 때문에 with 조건, 그것은 당신에게 효과가 없습니다.

간단한 홀더를 만들려면 PropertyDefinition 그리고 Property 적절한 공개 생성자를 사용하면 Hibernate에게 다음을 반환하도록 지시 할 수 있습니다.

select new Holder(pd, props)
  from PropertyDefinition as pd
  left join pd.properties as props
  with props.companyId = :companyId

나열된 문제를 처리해야합니다. 이상적이지는 않지만 상황에서 사용할 수있는 최상의 솔루션 일 것입니다.

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