속성과 관계가 자체적으로 정의 된 속성과 일부 수퍼 클래스에서 상속 된 속성이있는 "주소"라는 간단한 엔티티가 있습니다. 내가 달성하기 위해 노력하고있어null 값을 포함하는 열의 기준 API createAlias가 쿼리를 죽입니다.
public class Base {
private UUID id;
private Date createdAt;
@NotNull
private User createdBy; // User is a related Entity that cannot be null
private DataImport dataImport; // DataImport is another related entity that can be null
//getter & setter
}
public class Address extends Base {
private String street;
@NotNull
private Country country; // related entity that can't be null
//getter & setter
}
하나 개의 쿼리가 기준 API를 사용하여, 나는 거리와 createdAt 같은 모든 단순 속성이 포함 된 주소 오브젝트의 목록을 얻을 싶어요. 동시에 관련된 엔터티의 ID (createdBy.id, dataImport.id 및 country.id) 만 필요합니다.
나는 거의 다음과 같은 기준 쿼리를 사용하고:
entityManager.getDelegate().createCriteria(Address.class).add(criteriaExample)
.excludeZeroes()
.createAlias("createdBy", "subcreatedBy")
.createAlias("country", "subcountry")
.setProjection(Projections.projectionList().add(Projections.property("id").as("id"))
.add(Projections.property("createdAt").as("createdAt"))
.add(Projections.property("street").as("street")).
.add(Projections.property("subcreatedBy.id").as("createdBy.id"))
.add(Projections.property("subcountry.id").as("country.id")))
.setResultTransformer(new AliasToBeanNestedResultTransformer(Address.class));
List<Address> result = criteria.list();
이 바로 완벽한 작품!
dataImport 관계에 "별칭"만 추가 할 때 문제가 발생합니다.
...createAlias("dataImport", "subdataImport")...
에도 쿼리에 dataImport.id의 투사를 추가하지 않고, 그것을 최대한 빨리이 별칭을 추가로,()는 list.size를 의미하는 빈 목록을 반환 = 0.
nullable 속성에 별칭을 추가 할 수 없다는 현재 추측입니다. 아무도 해결책이 무엇 일지 모르는가? 그래서 관련 엔터티가 null이 아니면 ID를 얻고 싶습니다. 그리고 관계가 설정되지 않은 경우 단순히 null이되기를 원합니다.
미리 감사드립니다.