Hibernate多对多查询

时间:2015-11-30 21:20:11

标签: java hibernate java-ee jpa

我需要用hibernate做这个查询 SQL

SELECT * 
FROM objectif AS ob, objectifs_intervenants AS oi
WHERE ob.collaborateurId =2
AND ob.objectifId = oi.objectifId
AND oi.personneId =1

Ojectif class

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "objectifId")
private int objectifId;

@ManyToMany(mappedBy = "objectifs")
private List<Intervenant> intervenants;

@ManyToOne
@JoinColumn(name = "collaborateurId")
private Collaborateur collaborateur;

干预班

    @Entity
@DiscriminatorValue("intervenant")
public class Intervenant extends Personne 
{
    @ManyToMany
    @JoinTable(name="objectifs_intervenants", joinColumns={@JoinColumn(name = "personneId")},
                inverseJoinColumns = {@JoinColumn(name = "objectifId")})
    private List<Objectif> objectifs;

1 个答案:

答案 0 :(得分:0)

我建议:

select ob from Objectif ob join Intervenant i
where ob.collaborateur.collaborateurId = :collaborateurId
and i.personneId = :personneId

这将返回Objectif个对象的列表,您可以使用getIntervenants()获取有关您在SQL查询中拥有的干预者的其他信息。