# Reverse @OnToMany @JoinTable



## Schuriko (14. Jan 2019)

Ausgehend von

https://www.java-forum.org/thema/on...lazily-initialize-a-collection-fehler.183750/

wie könnte ich es hinbekommen, dass ich über File das zugehörige Project erfragen könnte?


----------



## mrBrown (14. Jan 2019)

Entweder über ein Repository (sowas wie `Project findByFile(File file)`) oder die Beziehung bidirektional machen, ersteres ist aber meist der saubere Weg.


----------



## Schuriko (14. Jan 2019)

mrBrown hat gesagt.:


> Entweder über ein Repository (sowas wie `Project findByFile(File file)`) oder die Beziehung bidirektional machen, ersteres ist aber meist der saubere Weg.


Okay, danke!


----------



## mrBrown (14. Jan 2019)

Du nutzt doch Spring Data JPA?

Dann ist `Project findByFile(File file);` alles, was im Repository-Interface ergänzt werden muss.


----------



## Schuriko (14. Jan 2019)

Könntest du mir bitte erklären, warum Variante 1 besser ist wie Variante 2 und wie bei Variante 2 die Bidirektional Notation lauten müsste.


----------



## Schuriko (14. Jan 2019)

mrBrown hat gesagt.:


> Du nutzt doch Spring Data JPA?
> 
> Dann ist `Project findByFile(File file);` alles, was im Repository-Interface ergänzt werden muss.


Ja ich benutze Hibernate over Spring Data JPA


----------



## mrBrown (14. Jan 2019)

Schuriko hat gesagt.:


> Könntest du mir bitte erklären, warum Variante 1 besser ist wie Variante 2


Eine unidirektionale Beziehung ist nahezu immer einfacher zu modellieren und zu benutzen, weil du einfach nur eine Beziehung in eine Richtung hast, und nicht zwei Beziehungen, in zwei Richtungen.



Schuriko hat gesagt.:


> und wie bei Variante 2 die Bidirektional Notation lauten müsste.


Ein @ManyToOne mit den Attributen des @OneToMany entsprechenden Attributen.


----------



## Schuriko (14. Jan 2019)

Wenn ich 

```
public interface ProjectRepository extends CrudRepository<Project, Long> {
   
    Project findByFile(File file);
   
}
```

erhalte ich beim compilieren folgende Fehlermeldung


> org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'projectService': Unsatisfied dependency expressed through field 'projectRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'projectRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.abado.pts.entities.Project com.abado.pts.repositories.ProjectRepository.findByFile(com.abado.pts.entities.File)! No property file found for type Project! Did you mean 'files'?
> at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:596) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
> at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
> at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:374) ~[spring-beans-5.1.3.RELEASE.jar:5.1.3.RELEASE]
> ...


----------



## mrBrown (15. Jan 2019)

Schuriko hat gesagt.:


> compilieren


Nein, erst beim ausführen.


Versuch es mal mit findByFiles als Methodenname.


----------

