如何用jpa进行这个sql查询?

时间:2013-05-21 09:01:04

标签: java-ee jpa glassfish ejb

我正在尝试在我的实体中创建一个查询。

我在mysql DB中有以下表格:

 Categorie : id, nom ...

 Article : num_code_barre_, categorie ...  

在我的实体分类中:

...

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Size(max = 30)
@Column(name = "nom")
private String nom;

...

在我的实体文章中:

...

@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 50)
@Column(name = "num_code_barre_")
private String numCodeBarre;
@Basic(optional = false)
@NotNull
@Column(name = "categorie")
private int categorie;

...

我已经在我的数据库中测试了这个sql查询,它起作用了:

SELECT c.nom , COUNT(a.numCodeBarre)  FROM categorie c INNER JOIN article a ON c.id =        a.categorie GROUP BY a.categorie

但是当我尝试在我的类别实体中创建一个namedQuery时,我的输出中收到一个错误:“解析查询的Synthax错误......”

@NamedQuery(name = "Categorie.count", query = "SELECT c.nom , COUNT(a.numCodeBarre)  FROM categorie c INNER JOIN article a ON c.id = a.categorie GROUP BY a.categorie")

有人知道我该怎么做?

2 个答案:

答案 0 :(得分:1)

“ON”不是JPA 1.0或JPA 2.0中JPQL FROM子句的一部分。它仅在JPA 2.1中引入,我怀疑你是否正在使用它,因为没有完全发布

答案 1 :(得分:0)

我不确定为什么你的SQL会导致语法错误,但你可以尝试这个JPQL语句:

@NamedQuery(name = "Categorie.count", query = "SELECT c.nom , COUNT(a.numCodeBarre)  FROM categorie as c, article as a WHERE c.id = a.categorie GROUP BY a.categorie")