2012-02-18 129 views
0

,因为我有遇到问题hour..take我作为一个初学者,请..小烦恼与JPA查询

查询很简单:

public List<String> finArticleByfamille(String famille){ 
EntityManager em = getEntityManager(); 
Query qr= em.createQuery("SELECT a.libel FROM Article a WHERE a.famille_idfamille = '"+famille+"'"); 

return qr.getResultList(); 
} 

我也曾经尝试这样做:

public List<String> finArticleByfamille(String famille){ 
EntityManager em = getEntityManager(); 
Query qr= em.createQuery("SELECT a.libel FROM Article a WHERE a.familleIdfamille = '"+famille+"'"); 

return qr.getResultList(); 
} 

“famille_idfamille” 是从表 “彩” 的一个外键,见截图:

enter image description here

误差来源于此电话:

String famille=famille_produit_fact_direct.getSelectedItem().toString(); 
l_article=(Vector) ajc.finArticleByfamille(famille); 

我得到这个错误:

Grave: null 
java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: An  exception occurred while creating a query in EntityManager: 
Exception Description: Error compiling the query [SELECT a.libel FROM Article a WHERE a.famille_idfamille = 'famille2'], line 1, column 38: unknown state or association field [famille_idfamille] of class [glob.entitys.Article]. 
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
at javax.swing.SwingWorker.get(SwingWorker.java:602) 
at glob.main$32.done(main.java:2068) 
at javax.swing.SwingWorker$5.run(SwingWorker.java:737) 

我尊重同名的数据库,那么为什么它不工作? (抱歉法语)

+1

发布未经类中的某些JPQL被定义不完整的创建本机查询。 JPQL语法是指字段/属性名称NOT DB列名称。 – DataNucleus 2012-02-18 17:48:42

+0

@DataNucleus:是的,我已经在我的回复中说过这个,我找到了解决方案... – 2012-02-18 18:47:55

回答

0

@Tim Gage的感谢你,我只是发现了一些.. 在我的实体glob.entitys.Article我有familleIdfamille的领域:

@JoinColumn(name = "FAMILLE_IDFAMILLE", referencedColumnName = "IDFAMILLE", nullable = false) 
@ManyToOne(optional = false) 
private Famille familleIdfamille; 

Famille它是另一个实体.. 那么它是正常的,他不知道famille_idfamille

编辑:

对此有何评论其从文档:

  • 查询字符串是指员工的实体,而不是数据库的表 员工...

然后我把这个:

Query qr= em.createQuery("SELECT a.libel FROM Article a WHERE a.familleIdfamille.idfamille = '"+famille+"'"); 

及其工作; 它是合乎逻辑的,它不起作用,因为familleIdfamilleFamille实体的实例...

+0

您应该对您所引用的帖子发表评论,或者在原帖中添加修改。添加答案不是在这里回答的适当方式。 – AHungerArtist 2012-02-18 16:06:05

0

听起来好像您的glob.entitys.Article缺少您正在尝试引用的famille_idfamille字段。该查询在概念上是针对Java对象的,而不是直接针对数据库的。基于数据库

,缺少的领域或许应该是这个样子:

@Basic 
String famille_idfamille; 

虽然顾名思义它可能是一个外键?在这种情况下,将其映射为String可能不合适。这可能是稍后要看的东西。

0

我宁可选择使用:

em.createNamedQuery(namedQuery); 
的情况下

您使用的是实体类中的namedQuery。

或者,如果你想更具体的查询,您可以使用your's数据库引擎本地sintax

em.createNativeQuery(Query);