我在一小时后遇到了一个问题。请把我当作初学者。
查询非常简单:
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();
}
&#34; famille_idfamille&#34;表格中的外键是&#34; Famille&#34;,请参见屏幕截图:
错误来自此次电话:
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)
我尊重与数据库相同的名称,为什么它不起作用? (对不起法语)
答案 0 :(得分:0)
听起来您的glob.entitys.Article
缺少您要引用的famille_idfamille
字段。查询在概念上是针对Java对象的,而不是直接针对数据库的。
根据您的数据库,缺少的字段应该类似于:
@Basic
String famille_idfamille;
虽然名字暗示它可能是外键?在这种情况下,将其映射为String
可能不合适。这可能会在以后看到。
答案 1 :(得分: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+"'");
及其工作;
它不合理是合乎逻辑的,因为familleIdfamille
是Famille
实体的实例......
答案 2 :(得分:0)
我更喜欢使用:
em.createNamedQuery(namedQuery);
如果您在实体类中使用了namedQuery。
或者,如果您希望更具体的查询,可以使用您的数据库引擎本机sintax创建本机查询
em.createNativeQuery(Query);