【问题标题】:select OneToMany query jpql选择 OneToMany 查询 jpql
【发布时间】:2017-08-14 10:46:07
【问题描述】:

我创建了两个实体 Idee 和 Avis,它们具有 OneToMany 关系。我想在 Idee 中选择集合。我试试这个,但它不起作用我显示了 avis 的所有表格。

SELECT avis FROM idee i JOIN i.avis avis

我该如何纠正它?

这是Idee.java

@Entity
@Table(name = "idee")
public class Idee implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column
    private String titre;
    @Column
    private String description;

    @Column
    private String theme;

    @Column
    private String type;

    @OneToMany(mappedBy = "idee")
    private Collection<Avis> avis;
    @ManyToOne
    @JoinColumn(name="user_id")
    private Utilisateur user;

这是 Avis.java

@Entity
@Table(name = "avis")
public class Avis implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column
    private String commentaire;
    @Column
    private int score;

    @Column
    private Boolean signaler;

    @Column
    private Boolean satisfaction_utilisateur;

    @ManyToOne
    @JoinColumn(name = "idee_id")
    private Idee idee;


    @ManyToOne
    @JoinColumn(name="user_id")
    private Utilisateur user_avis;

【问题讨论】:

  • 使用@OneToMany(mappedBy = "idee", cascade = CascadeType.ALL) 和@ManyToOne(cascade = CascadeType.ALL))
  • 显示什么错误
  • 这个查询没有显示我正在处理的结果,这意味着它显示了所有的表 avis,我只想要特定 Idee 的集合
  • 您是否尝试过对数据库进行等效查询。检查是否存在任何结果?
  • 你试过cascadeType吗?

标签: java jpql


【解决方案1】:

您的查询不起作用的原因可能与以下原因有关:

  1. FROM 子句中,您使用了错误的实体名称,即idee。您必须使用实体的名称(您没有给出)或实体的非限定类名称 Idee
  2. 您用于i.avis 的标识变量与根据规范无效的实体类名称相同,因为标识变量不区分大小写 (avis == Avis)。

所以你的查询应该修改为

SELECT a FROM Idee i JOIN i.avis a

【讨论】:

  • 我改变了这种方式,现在它可以工作了: List resultList = (List)this.entityManager.createQuery(" SELECT a FROM idee x JOIN x.avis a where x.id =:ideeId ").setParameter("ideeId", ideeId) .getResultList();
  • 实体名称是Idee,但表名称是idee,因为我使用的是MySQL数据库。
  • JPQL 与 SQL 类似但不一样,所以 JP QL 查询不涉及表名。
猜你喜欢
  • 2014-07-30
  • 2014-03-22
  • 2013-10-23
  • 2017-11-17
  • 2020-08-27
  • 2015-10-02
  • 2011-01-17
  • 2011-08-06
  • 2016-07-08
相关资源
最近更新 更多