Jak można skonfigurować ich podmioty WZP aby nie sprowadzić podmioty powiązane, chyba że jest pewien parametr wykonanie.Wiosna danych JPARepository: Jak warunkowo sprowadzić dzieci udziałów w jednostkach
Zgodnie z dokumentacją Springa, , należy użyć adnotacji @EntityGraph
, aby określić zasady pobierania dla zapytań, ale to nie pozwala mi decydować w czasie wykonywania, czy chcę załadować te elementy.
Nie mam nic przeciwko umieszczaniu elementów podrzędnych w osobnym zapytaniu, ale aby to zrobić, muszę skonfigurować moje repozytorium lub obiekty, aby nie pobierać żadnych elementów podrzędnych. Niestety, nie mogę znaleźć żadnej strategii, jak to zrobić. FetchPolicy
jest ignorowany, a EntityGraph
jest pomocny tylko przy określaniu, które elementy chcę odzyskać z niecierpliwością.
Załóżmy na przykład, że Account
jest rodzicem, a Contact
jest dzieckiem, a Konto może zawierać wiele Kontaktów.
Chcę móc to zrobić:
if(fetchPolicy.contains("contacts")){
account.setContacts(contactRepository.findByAccountId(account.getAccountId());
}
Problemem jest sprężynowy dane chętnie pobiera kontakty jakikolwiek.
klasaKonto Podmiot wygląda następująco:
@Entity
@Table(name = "accounts")
public class Account
{
protected String accountId;
protected Collection<Contact> contacts;
@OneToMany
//@OneToMany(fetch=FetchType.LAZY) --> doesn't work, Spring Repositories ignore this
@JoinColumn(name="account_id", referencedColumnName="account_id")
public Collection<Contact> getContacts()
{
return contacts;
}
//getters & setters
}
Klasa AccountRepository wygląda następująco:
public interface AccountRepository extends JpaRepository<Account, String>
{
//@EntityGraph ... <-- has type= LOAD or FETCH, but neither can help me prevent retrieval
Account findOne(String id);
}
post klasa podmiot. – chrylis
Kolekcje w JPA domyślnie są leniwe, Spring Data JPA nic w tym nie zmienia. Jeśli jest gdzieś wezwanie do 'getContacts' w twoim kodzie, to wszystko zostanie pobrane, ponieważ jest to domyślne. –