【问题标题】:How to find value in table with JPA如何使用 JPA 在表中查找值
【发布时间】:2015-11-25 21:46:48
【问题描述】:

我有两个实体 COMMANDE 和 ARTICLES,它们之间有一个关联 ManytoMany 这个关联创建了一个新表“DETAIL_Commande”,它有两列 id_commande 和 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`
}

【问题讨论】:

    标签: hibernate spring-mvc jpa


    【解决方案1】:

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

    如果您真的只想要一个关联,您应该选择关联的一侧将其标记为mappedBy。例如让Article.commandes 不变,然后在Commande 上执行下一步

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

    回到问题,在 getAllArticlesByCodeCommande 方法中混合(并且是错误的!)native 映射信息在 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】:

      请按照@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。

      【讨论】:

        猜你喜欢
        • 2021-07-07
        • 1970-01-01
        • 2020-08-23
        • 2011-02-15
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        相关资源
        最近更新 更多