[英]Hibernate criteria of Projection
我有兩個與@OneToOne
關系的類: User
和Player
。
用戶包含一個播放器:
@Entity
@Table(name = "user")
public class User {
@Column(name = "nickname")
private String nickname;
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "id_player")
private Player player;
//getters and setters...
}
我想只使用nickname
和player
查詢用戶,而對於player
我並不需要所有屬性,我只想要2。
這就是我現在所擁有的:
//Projections for the class User
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("id"), "id");
projectionList.add(Projections.property("nickname"), "nickname");
projectionList.add(Projections.property("player"), "player");
Criteria criteria = session.createCriteria(User.class);
criteria.setFirstResult(player.getPvpRank() - 5);
criteria.setMaxResults(11);
criteria.createAlias("player", "p");
criteria.addOrder(Order.asc("p.pvpRank"));
criteria.setProjection(projectionList);
criteria.setResultTransformer(Transformers.aliasToBean(User.class));
我僅獲得nickname
, id
和player
,但是如何設置對玩家的投射,只獲得player.level
而不是所有屬性?
它認為這完全符合您的建議:
projectionList.add(Projections.property("player.level"), "player.level");
首先在User
為JoinColumn表Player
創建別名 , 然后在您的projectionList中引用它 。
Criteria criteria = session.createCriteria(User.class);
criteria.createAlias("player", "p");
projectionList.add(Projections.property("p.level"), "player");
...
criteria.setProjection(projectionList);
criteria.setResultTransformer(Transformers.aliasToBean(User.class));
我希望這可以幫助你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.