2015-08-06 2 views
5

Ich habe ein Unternehmen eine List enthalten, die standardmäßig geladen somit lazy ist:Wie erzwinge man das eifrige Laden mit dem CrudRepository in Spring-Daten?

interface MyEntityRepository extends CrudRepository<MyEntity, Long> { 

} 

@Entity 
public class MyEntity { 
    @Id 
    private Long id; 

    @OneToMany(mappedBy = "bar") //lazy by default 
    private List<Bar> bars; 
} 

@Entity 
public class Bar { 
    //some more 
} 

Frage: Wie kann ich eifrig Laden erzwingen, wenn repository.findOne(id) Ausführung?

+1

'@OneToMany (Fetch = FetchType.EAGER)' wird diese Hilfe? – Jebil

+1

Ich weiß, dass ich den "eifrigen" Modus so erzwingen kann. Aber ich möchte mich an den "faulen" Standard halten und nur eifrig auf alle Listen einer bestimmten Auswahl drängen. – membersound

+0

Nun, wenn Sie Kriterien in DAO verwenden, können Sie erzwingen Typ durch 'criteria.setFetchMode (" bars ", FetchMode.EAGER)' – Jebil

Antwort

2

Ich brauchte das auch und da ich den Dao innerhalb eines Serviceobjekts anrufe, das eine Transaktion ist, die ich anrufe, rufen Sie die Methode get auf, also keine Ausnahme, und ich konnte die Datensätze abrufen. So etwas wie in Java 8:

public ProductEntity findProduct(int id) { 
    ProductEntity p = productRepository.findOne(id); 
    p.getPresentations().stream().count(); 
    return p; 
} 

p.getPresentations().stream().count(); zwingen wird, die holen, ich weiß, ist keine saubere Art und Weise, es zu tun, aber es wird die Arbeit in der Zwischenzeit getan

3

können Sie eifrig zwingen Schreiben holen benutzerdefinierte HQL-Abfrage mit left join fetch, zB:

interface MyEntityRepository extends CrudRepository<MyEntity, Long> { 
    @Query("select e from MyEntity e left join fetch e.bar b where e.id = ?1") 
    MyEntity findOne(long id) 
} 
-3

ändern Sie Ihre Zuordnung von

@OneToMany(mappedBy = "bar") //lazy by default 

Um

@OneToMany(mappedBy = "bar", fetch = FetchType.EAGER) //lazy by default 
+0

Um mich selbst zu zitieren: "Ich weiß, dass ich den eifrigen Modus so erzwingen kann. Aber ich will mich an den faulen Standard halten und nur eifrig auf [...] eine bestimmte Auswahl erzwingen" – membersound

Verwandte Themen