【问题标题】:Hbernate hql for many to many多对多的休眠 hql
【发布时间】:2020-06-20 19:49:47
【问题描述】:

我有两个具有多对多关系的类

@Table(name="employe")

public class Employe implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int Id_emp;
    @Column(unique=true)
    private String username;
    @ManyToMany
    @JoinTable(name="produit_employe",joinColumns=@JoinColumn(name="id_employe"),inverseJoinColumns
            =@JoinColumn(name="id_produit"))
    private List<Produit> produits =new ArrayList<Produit>();
///}

Entity
@Table(name="Produit")
public class Produit implements Serializable {
    
    @Id
    private int id_produit;
    
    private String nom_produit;
    
    @ManyToMany(mappedBy="produits")
    private List<Employe> employes=new ArrayList<Employe>();

//}

如何显示分配给每个员工的产品名称。 就像我用sql做的例子一样,我想把它转换成hql。

select p.nom_produit from produit_employe pe, produit p where pe.id_produit=p.id_produit AND

pe.id_employe=2

【问题讨论】:

    标签: java sql hibernate hql


    【解决方案1】:

    使用 hql 时,我们必须考虑实体,而不是像我们在 sql 中那样的表。

    这是等效的 hql 是:

    select p.nom_produit from Employe e join e.produits p where e.Id_emp = 2
    

    我已经使用 Spring Data JPA 对其进行了测试,这是在员工存储库中使用的代码:

    @Query("select p.nom_produit from Employe e join e.produits p where e.Id_emp = :employeId")
    List<String> getProductNameAssignedToEmployee (@Param("employeId") Integer employeId);
    

    【讨论】:

    • 你可以给我解释一下它来自哪里
    • 我正在从实体 Employe 执行“选择”操作。在实体 Employe 中,您有一个定义多对多关系的产品列表。在进行选择时,我加入了产品列表,因为我需要产品的名称;它使用多对多关系的定义进行连接。负责多对多关系的表(produit_employe)由hibernate管理,因此我们不需要像在sql中那样手动管理它。在你的application.properties中启用spring.jpa.show-sql=true,可以看到hql后面生成的sql。
    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2019-07-16
    相关资源
    最近更新 更多