Hibernate从多个关系中获取剩余对象

时间:2015-08-19 20:28:01

标签: java hibernate criteria

我有一个存储俱乐部和团队的数据库。 俱乐部有多个球队,球队只有一个俱乐部。 是否可以查询所有不在特定俱乐部中的球队 休眠标准api? 这是(剥离的)Club.java和Team.java

Club.java

@Entity
@Table(name = "clubs")
public class Club {
    @Id
    @GeneratedValue
    @Column(name = "club_id")
    private int id;
    @Column(name = "name")
    private String name;
    @OneToMany(mappedBy = "club")
    private java.util.Set<Team> teams;

    [setters, constructors etc]
}

Team.java

@Entity
@Table(name = "team")
public class Team {
    @Id
    @GeneratedValue
    @Column(name = "team_id")
    private int id;
    @Column(name = "name")
    private String name;
    @ManyToOne
    @JoinColumn(name = "club_id")
    private Club club;

    [same here]   
}

2 个答案:

答案 0 :(得分:1)

它应该是这样的:

Criteria criteria=session.createCriteria(Team.class);
        .createAlias("club", "c")
        .add( Restrictions.not(Restrictions.like("c.name", "nameOfTheClubIAmLookingFor", MatchMode.EXACT)) )
        List<Team> teams=criteria.list();

答案 1 :(得分:1)

作为上述答案的略微变化,如果您已经拥有了希望找到所有不属于它的团队的俱乐部对象,您应该可以执行以下操作:

Criteria criteria = session.createCriteria(Team.class);
criteria.add(Restrictions.ne("club", myClub));
List<Team> teams = criteria.list();

这可以避免查询俱乐部名称,恕我直言是更清晰的代码。