代码之家  ›  专栏  ›  技术社区  ›  e2rabi

如何使用JPA在表中查找值

  •  3
  • e2rabi  · 技术社区  · 9 年前

    我有两个实体COMMAND和ARTICLES,它们之间有一个关联Manyto。这个关联创建了一个新表“DETAIL_COMMAND”,它有两个列id_command和id_article,我想在这个表中找到一个值,其中包含JPA的id_COMMANDE

    物品代码

    @Entity
    @Table(name="TB_ARTICLES")
    public class Article implements Serializable{
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
    private long id_article ;
    private String nom_article ;
    private String designation ;
    private double prix_unitaire ;
    private int quantite;
    @ManyToMany
    @JoinTable(name="TB_DETAIL_COMMANDES"
    ,joinColumns=@JoinColumn(name="id_article"),inverseJoinColumns=@JoinColumn(name="id_commande"))`enter code here`
    private List<Commande> commandes ;
    

    命令实体代码:

    @Entity
    @Table(name="TB_COMMANDES")
    public class Commande implements Serializable{
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
    private long id_commande ;
    
    private String date_commande ;
    private String date_livraison ;
    private String etat ;
    private double montant_ht;
    private double montant_ttc;
    private int quantite;
    @ManyToOne()
    private Client client ;
    
    @ManyToMany
    @JoinTable(name="TB_DETAIL_COMMANDES"
    ,joinColumns=@JoinColumn(name="id_commande"),inverseJoinColumns=@JoinColumn(name="id_article"))
    private List<Article> articles ;
    

    我尝试了这个代码,但它没有代码

    public List<Article> getAllArticlesByCodeCommande(long code_commande) {
        Query query = entity_manager.createQuery("SELECT c FROM TB_DETAIL_COMMANDES c where c.id_commande like:x");
         query.setParameter("x", code_commande);
         List<Article> article = query.getResultList();
         return article;`enter code here`
    }
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Guillermo    9 年前

    根据映射注释,Commande和Article之间没有一个关联,而是两个关联:两者都是多对多的。

    如果你真的只想要一个关联,你应该选择关联的一方将其标记为 mappedBy 。例如,让 Article.commandes 保持不变,然后在 Commande

    @ManyToMany(mappedBy="commandes")
    private List<Article> articles ;
    

    回到问题,在方法中 getAllArticlesByCodeCommande 正在混合(并且是错误的!) 出生地的 内部映射信息 JPA 查询 期望 JPQL . 我修复了代码以向您展示和示例,但您必须遵循链接才能理解JPA。而且 here 您可以看到JPQL示例和语法。

    public List<Article> getAllArticlesByCodeCommande(long code_commande) {
        Query query = entity_manager.createQuery("SELECT a FROM Commande c JOIN c.articles a WHERE c.id_commande = :x");
        query.setParameter("x", code_commande);
        List<Article> article = query.getResultList();
        return article;
    }
    
        2
  •  1
  •   Karthik R    9 年前

    请按照@Guillermo的建议检查映射。此外,请注意,在选择查询中必须使用实体/类名称,而不是表名称。

    JPA查询不正确:

    Query query = entity_manager.createQuery("SELECT c FROM TB_DETAIL_COMMANDES c where c.id_commande like:x");
    

    正确的JPA查询 :

    Query query = entity_manager.createQuery("SELECT a FROM Commande c WHERE c.id_commande like :x");
    

    有不同的方法( "EntityManager" )喜欢 createNativeQuery() , createQuery() 。看一看。您正在尝试混合NativeQuery和JPAQuery。