ハイバネート基準のためにデフォルトで構築されている「select * from A」を避けるために、より小さなSQLを構築しようとしています。
「トランスフォーマー」を介して単純なフィールド(関係なし)を使用すると、次の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 を取得し、列を減らすにはどうすればよいですか? 前もって感謝します。