내 최대 절전 모드 왼쪽 외부 조인의 결과를위한 좋은 물체 구조
-
05-07-2019 - |
문제
특정 회사와 관련된 모든 정의와 관련된 속성을 검색하는 외부 조인 쿼리를 만들어야합니다.
두 개의 최대 절전 모드 모델 객체가 있습니다.
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
나열된 문제를 처리해야합니다. 이상적이지는 않지만 상황에서 사용할 수있는 최상의 솔루션 일 것입니다.
제휴하지 않습니다 StackOverflow