簡體   English   中英

投影的休眠標准

[英]Hibernate criteria of Projection

我有兩個與@OneToOne關系的類: UserPlayer

用戶包含一個播放器:

@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...
}

我想只使用nicknameplayer查詢用戶,而對於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));

我僅獲得nicknameidplayer ,但是如何設置對玩家的投射,只獲得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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM