Я пытаюсь создать меньший SQL, чтобы избежать «выбора * из A», который создается по умолчанию для критериев гибернации.
Если я использую простые поля (без отношения), через «Трансформеры», я могу получить этот SQL:
select description, weight from Dog;
Привет, у меня есть этот субъект:
@Entity
public class Dog
{
Long id;
String description;
Double weight;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "person_id", nullable = false)
Person owner;
}
@Entity
public class Person
{
Long id;
String name;
Double height;
Date birthDate;
}
Моя цель - это:
select description, weight, owner.name from Dog
Я пробовал это с Критериями (и подкритериями):
Criteria dogCriteria = sess.createCriteria(Dog.class);
ProjectionList proList = Projections.projectionList();
proList.add(Projections.property("description"), description);
proList.add(Projections.property("weight"), weigth);
dogCriteria.setProjection(proList);
Criteria personCriteria = dogCriteria.createCriteria("owner");
ProjectionList ownerProList = Projections.projectionList();
ownerProList.add(Projections.property("name"), description);
dogCriteria.setProjection(ownerProList); //After this line, debugger shows that the
//projection on dogCriteria gets overriden
//and the query fails, because "name" is
//not a field of Dog entity.
Как использовать проекции, чтобы получить меньший SQL, меньше столбцов?
Заранее спасибо.