JPA-Criteria Api-Objekte auswählen, wo die Spalte null ist
Ich habe eine Tabelle "Wort", das in PostgreSQL-DB:
CREATE TABLE word
(
word_id bigserial NOT NULL,
word character varying(15) NOT NULL,
counter integer NOT NULL,
base_letters character varying(15),
CONSTRAINT word_pk PRIMARY KEY (word_id )
)
Und ich habe eine DAO-Methode was finden muss, um alle Wörter in der Tabelle, wo die Spalte 'base_letters'. Ich benutze den Frühling im Allgemeinen. Meine Methode:
public List<Word> getAllWordsWithoutBaseLetters() {
CriteriaQuery<Word> c = cb.createQuery(Word.class);
Root<Word> words = c.from(Word.class);
c.select(words).where(cb.isNull(words.get("base_letters")));
TypedQuery<Word> q = entityManager.createQuery(c);
List<Word> allWordsWithoutBaseLetters = q.getResultList();
return allWordsWithoutBaseLetters;
}
Leider bin ich immer eine Fehlermeldung, die mich verwirrt:
ERROR [org.springframework.scheduling.support.MethodInvokingRunnable] - Invocation of method 'setBaseLettersToAllWordsWithoutThem' on target class [class $Proxy48] failed
java.lang.IllegalArgumentException: Unable to resolve attribute [base_letters] against path
at org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:118)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:223)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:194)
at pl.net.grodek.snd.dao.WordDaoImpl.getAllWordsWithoutBaseLetters(WordDaoImpl.java:95)
at pl.net.grodek.snd.service.WordServiceImpl.setBaseLettersToAllWordsWithoutThem(WordServiceImpl.java:175)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy48.setBaseLettersToAllWordsWithoutThem(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273)
at org.springframework.scheduling.support.MethodInvokingRunnable.run(MethodInvokingRunnable.java:65)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:51)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Bitte erklären Sie mir, was falsch ist.
InformationsquelleAutor Mariusz Grodek | 2012-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie müssen mit dem java-Attribut-Namen, nicht nach der Tabelle, Spalte name, während der Verwendung der JPA-Abfragen (im Gegensatz zu native queries). Vorausgesetzt, Sie respektieren Namenskonventionen, das Attribut heißt "baseLetters" und das folgende sollte den job tun :
Sie sind willkommen 😉
InformationsquelleAutor kgautron