我有两个实体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`
}
答案 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混合在一起。