Небольшие проблемы с JPA Query - PullRequest
0 голосов
/ 18 февраля 2012

Я столкнулся с проблемой с одного часа .. возьми меня как новичка, пожалуйста ..

Запрос очень прост:

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" - это внешний ключ из таблицы "Famille", см. Скриншот:

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)

Я уважал то же имя, что и база данных, так почему он не работает? (извините за французский язык)

Ответы [ 3 ]

0 голосов
/ 18 февраля 2012

@ Тим Гейдж, спасибо, я только что кое-что заметил .. в моей сущности glob.entitys.Article у меня есть familleIdfamille как поле:

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

Famille это другой объект .. тогда это нормально, что он не знает famille_idfamille?

EDIT:

этот комментарий взят из документации:

  • Строка запроса относится к сущности Employee, а не к таблице. Сотрудник базы данных ...

Тогда я положил это:

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

и его сработало; логично, что он не работает, потому что familleIdfamille является экземпляром Famille сущности ...

0 голосов
/ 07 августа 2012

Я предпочитаю использовать:

em.createNamedQuery(namedQuery);

в случае, если вы используете namedQuery внутри класса Entity.

Или, если вы хотите более конкретный запрос, вы можете создать собственный запрос, используя собственный синтаксис ядра вашей базы данных

em.createNativeQuery(Query);
0 голосов
/ 18 февраля 2012

Похоже, что в вашем glob.entitys.Article отсутствует поле famille_idfamille, на которое вы пытаетесь сослаться. Концептуально запрос направлен против объектов Java, а не напрямую к базе данных.

Исходя из вашей базы данных, пропущенное поле должно выглядеть примерно так:

@Basic
String famille_idfamille;

Хотя название предполагает, что это может быть внешний ключ? В этом случае отображение его как String может быть неуместным. Это может быть что-то посмотреть на позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...