带有集合的Hibernate标准和"不包含"

时间:2015-08-18 16:49:31

标签: hibernate hibernate-criteria

public class Game{
@Id
    private int id;

    @ManyToMany
    @JoinTable(
        name="game_community"
        , joinColumns={
            @JoinColumn(name="game_id", nullable=false)
            }
        , inverseJoinColumns={
            @JoinColumn(name="community_id", nullable=false)
            }
        )
    private Set<Community> communities;

    @ManyToMany
    @JoinTable(
        name="user_game"
        , joinColumns={
            @JoinColumn(name="game_id", nullable=false)
            }
        , inverseJoinColumns={
            @JoinColumn(name="user_id", nullable=false)
            }
        )
    private Set<User> users;

帮我创建Hibernate标准来获取游戏,其中community.id = 1

和game.users为null或不包含id = 5的用户

1 个答案:

答案 0 :(得分:0)

我认为用户和社区的id变量的名称是“id”,并且你有一个UserGame类,那么我认为你可以使用以下代码:

DetachedCriteria critSubQuery = DetachedCriteria.forClass(UserGame.class, "ug");
critSubQuery.add(Restrictions.eq("ug.user.id", 5));
critSubQuery.add(Restrictions.eqProperty("ug.game.id","g.id"));
critSubQuery.setProjection(Projections.property("ug.game.id"));

Criteria crit = sess.createCriteria(Game.class, "g");
crit.createAlias("communities", "com");
crit.add(Restrictions.eq("g.com.id", 1));
crit.add(Subqueries.notExists("g.id", critSubQuery));

您需要执行子查询以获取与user_user = 5的User-Game关系的所有记录,并在主查询中使用该子查询。

我希望这段代码能够很好地运作。

祝你好运。