--
schema_version: "1.0"
provider: "gemini"
title: "Spring Data JPA Repository Fehlerbehebung - Google Gemini"
url: "https://gemini.google.com/app/c_2876575c7b39b6d1?is_sa=1&is_sa=1&android-min-version=301356232&ios-min-version=322.0&campaign_id=bkws&utm_source=sem&utm_medium=paid-media&utm_campaign=bkws&pt=9008&mt=8&ct=p-growth-sem-bkws&gclsrc=aw.ds&gad_source=1&gad_campaignid=20437330488&gbraid=0AAAAApk5Bhlxs8zCmvTOj49GGNhf647tf&gclid=Cj0KCQjw_IXQBhCkARIsADqELbLLm1LZGw1izE5t-5bfDIwPV-lS0t2MOeMroZ9aIsn7utxUbUp_slIaArw0EALw_wcB"
captured_at: "2026-05-12T13:24:10.004Z"
model: "Gemini"
message_count: "3"
extension_version: "0.1.0"
--

# Spring Data JPA Repository Fehlerbehebung - Google Gemini

## 1. User
You said

In meiner Spring JPA Anwendung kriege ich folgende Exception - woran kann das liegen?

java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@5ca758b9 testClass = thkoeln.archilab.restaurant.metatests.dddtests.BasicUseCaseImplementationPackageTest, locations = [], classes = [thkoeln.archilab.restaurant.RestaurantApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true"], contextCustomizers = [org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6c23667e, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@250284ae, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@22265a2d, org.springframework.boot.test.web.reactor.netty.DisableReactorResourceFactoryGlobalResourcesContextCustomizerFactory$DisableReactorResourceFactoryGlobalResourcesContextCustomizerCustomizer@653bfc3d, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@1f, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizer@37a53e65, org.springframework.boot.test.context.SpringBootTestAnnotation@86a43653], resourceBasePath = "src/main/webapp", contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:180)

at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:130)

at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:191)

at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:130)

at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)

at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:163)

at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:212)

at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:194)

at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1709)

at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:556)

at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:546)

at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)

at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)

at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)

at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:782)

at java.base/java.util.Optional.orElseGet(Optional.java:364)

at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)

at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mealAdminServiceAdapter' defined in file [C:\Users\stefa\Documents\Git\SS26-ST2\m1\ST2M1b-b31fccd4-[redacted-phone]-8ce5-cd6d66f8ee0d\target\test-classes\thkoeln\archilab\restaurant\adapters\MealAdminServiceAdapter.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'mealService' defined in file [C:\Users\stefa\Documents\Git\SS26-ST2\m1\ST2M1b-b31fccd4-[redacted-phone]-8ce5-cd6d66f8ee0d\target\classes\thkoeln\archilab\restaurant\solution\meal\application\MealService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'mealRepository' defined in thkoeln.archilab.restaurant.solution.meal.domain.MealRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.Optional thkoeln.archilab.restaurant.solution.meal.domain.MealRepository.findByMealName(java.lang.String); Reason: Failed to create query for method public abstract java.util.Optional thkoeln.archilab.restaurant.solution.meal.domain.MealRepository.findByMealName(java.lang.String); No property 'mealName' found for type 'Meal'

at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:795)

at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625)

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)

at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)

at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)

at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)

at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)

at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1463)

at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:553)

at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)

at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:225)

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:152)

... 17 more

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mealService' defined in file [C:\Users\stefa\Documents\Git\SS26-ST2\m1\ST2M1b-b31fccd4-[redacted-phone]-8ce5-cd6d66f8ee0d\target\classes\thkoeln\archilab\restaurant\solution\meal\application\MealService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'mealRepository' defined in thkoeln.archilab.restaurant.solution.meal.domain.MealRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Could not create query for public abstract java.util.Optional thkoeln.archilab.restaurant.solution.meal.domain.MealRepository.findByMealName(java.lang.String); Reason: Failed to create query for method public abstract java.util.Optional thkoeln.archilab.restaurant.solution.meal.domain.MealRepository.findByMealName(java.lang.String); No property 'mealName' found for type 'Meal'

at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:795)

at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)

at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)

#### Gemini said

Die Fehlermeldung ist ziemlich eindeutig, auch wenn sie in einem riesigen Stacktrace versteckt ist. Das Kernproblem liegt in deiner Repository-Definition.

##### Die Ursache

Spring Data JPA versucht beim Start der Anwendung (oder des Tests), aus dem Methodennamen in deinem Repository eine Datenbankabfrage zu generieren. Dabei tritt folgender Fehler auf:

> **No property 'mealName' found for type 'Meal'**

Das bedeutet: In deinem `MealRepository` hast du eine Methode definiert, die `findByMealName` heißt. Spring schaut nun in deiner Entity-Klasse `Meal` nach, ob es dort ein Feld namens `mealName` gibt – und findet keines.

##### So löst du das Problem

Du hast zwei Möglichkeiten, dies zu korrigieren:

###### 1. Den Methodennamen anpassen

Prüfe, wie das Feld in deiner Klasse `Meal` tatsächlich heißt. Wenn das Feld dort zum Beispiel einfach nur `name` heißt, musst du die Methode im Repository umbenennen:

Java

```
// Im MealRepository
Optional<Meal> findByName(String name); // Wenn das Feld in Meal "name" heißt
```

###### 2. Das Feld in der Entity anpassen

Falls das Feld im Repository korrekt benannt ist, musst du sicherstellen, dass die Entity `Meal` dieses Attribut auch besitzt:

Java

```
@Entity
public class Meal {
    // ... andere Felder
    private String mealName; // Muss exakt so geschrieben werden wie im findBy...
}
```

##### Warum bricht deshalb der ganze Test ab?

Da Spring den `ApplicationContext` (also das Herzstück deiner Anwendung) nicht korrekt zusammenbauen kann, wenn die Repositories fehlerhaft sind, schlägt die Initialisierung fehl.

Die Kette der Abhängigkeiten (Dependency Injection), die hier scheitert, sieht so aus:

**MealRepository**: Kann nicht erstellt werden (wegen `findByMealName`).

**MealService**: Kann nicht erstellt werden, weil er das `MealRepository` benötigt.

**MealAdminServiceAdapter**: Kann nicht erstellt werden, weil er den `MealService` benötigt.

Sobald du den Namen im Repository oder in der Entity korrigiert hast, sollte der Context wieder erfolgreich laden. Hast du eventuell vor kurzem ein Refactoring durchgeführt und vergessen, den Namen im Repository mit anzupassen?

## 2. User
You said

Mein Attribut heißt einfach nur "name". Kannst du mir erklären, warum das jetzt einen Fehler gibt?

#### Gemini said

Das ist ein klassischer Fall von „Spring ist zu schlau für sein eigenes Bestreben“.

Spring Data JPA nutzt eine Technik namens **Property Expression**, um aus Methodennamen automatisch SQL-Abfragen zu generieren. Wenn du eine Methode im Repository definierst, die mit `find...By` beginnt, zerlegt Spring den Rest des Namens, um die entsprechenden Attribute (Properties) deiner Entity zu finden.

##### Der Mechanismus

Wenn deine Methode `findByMealName(String mealName)` heißt, geht Spring wie folgt vor:

Es ignoriert das Präfix `findBy`.

Es sucht in der Klasse `Meal` nach einem Attribut namens **`mealName`**.

Da dein Attribut aber nur **`name`** heißt, kann Spring den Teil `mealName` nicht zuordnen und wirft die `IllegalStateException`, weil es die Abfrage nicht „bauen“ kann.

##### Vergleich: Falsch vs. Richtig

| Repository Methode | Erwartetes Attribut in Meal | Status |
| --- | --- | --- |
| findByMealName | private String mealName; | ❌ (Nicht gefunden) |
| findByName | private String name; | ✅ (Treffer!) |

##### Die Lösung

Du musst die Methode in deinem `MealRepository` einfach umbenennen, damit sie exakt dem Namen deines Feldes in der Entity entspricht:

Java

```
public interface MealRepository extends JpaRepository<Meal, UUID> {
    // Ändere findByMealName zu findByName
    Optional<Meal> findByName(String name);
}
```

##### Ein kleiner Tipp für die Zukunft

Spring ist hier sehr strikt. Selbst kleine Tippfehler oder Abweichungen in der Groß-/Kleinschreibung führen dazu, dass der `ApplicationContext` nicht lädt.

Falls du das Attribut `name` behalten willst, aber die Suche im Repository unbedingt `findByMealName` nennen möchtest (was selten sinnvoll ist), müsstest du eine manuelle Abfrage per `@Query` Annotation definieren. Aber der Standardweg ist definitiv die Umbenennung der Methode in `findByName`.

## 3. Assistant
_model: Gemini_

Kai Küstners Alter und Beruf

E-Mail-Versand nicht möglich

Ruhestandsstrategie für deutsche Anleger

Gemini-Modell für Anlagestrategie

Ruhestandsstrategie: Portfolio-Optimierung & Steuern

Bereit für deine nächste Anfrage

Präsentations-Tipp: Binsenweisheit oder nicht?

Search chats (Ctrl+Shift+K)

Press space for more information.

Bob Dylan Album Request

Use microphone

Expand text

Copy response

More

Edit prompt

Add files

Expand menu

New chat (Ctrl+Shift+O)

Gemini Apps Activity
