如何使用JPA在表中查找值

时间:2015-08-31 19:14:41

标签: hibernate spring-mvc jpa

我有两个实体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`
}

2 个答案:

答案 0 :(得分:1)

根据您的地图注释,您在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;
}

答案 1 :(得分:1)

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

错误的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");

createNativeQuery()createQuery()等不同方法("EntityManager")。看看它。您正试图将NativeQuery和JPAQuery混合在一起。