Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zaimplementować lekką wersję Entity z repozytorium Jpa?

Spring zapewnia dwa mechanizmy, których można użyć do ograniczenia danych do pobrania.

Projekcje

Projekcje mogą pomóc zredukować dane pobierane z bazy danych poprzez ustawienie, jakie dokładnie atrybuty chcesz pobrać.

Przykład:

@Entity
class Person {
    @Id UUID id;
    String firstname, lastname;
    @OneToOne
    Address address;
}

@Entity
static class Address {
    @Id UUID id;
    String zipCode, city, street;
}

interface NamesOnly {
    String getFirstname();
    String getLastname();
}

@Repository
interface PersonRepository extends Repository<Person, UUID> {
    Collection<NamesOnly> findByLastname(String lastname);
}

Wykres encji

Adnotacja EntityGraph może pomóc w zmniejszeniu liczby zapytań do bazy danych, ustawiając dokładnie powiązane encje, które musisz pobrać.

Przykład:

@Entity
@NamedEntityGraph(name = "GroupInfo.detail", attributeNodes = @NamedAttributeNode("members"))
public class GroupInfo {
    @Id UUID id;
    @ManyToMany //default fetch mode is lazy.
    List<GroupMember> members = new ArrayList<GroupMember>();
}

@Repository
public interface GroupRepository extends CrudRepository<GroupInfo, String> {

    @EntityGraph(value = "GroupInfo.detail", type = EntityGraphType.LOAD)
    GroupInfo getByGroupName(String name); //Despite of GroupInfo.members has FetchType = LAZY, it will be fetched because of using EntityGraph
}

Istnieją dwa typy EntityGraph :

  1. EntityGraphType.LOAD - służy do określenia grafu encji, atrybuty określone przez węzły atrybutów grafu encji są traktowane jako FetchType.EAGER a atrybuty, które nie są określone, są traktowane zgodnie z ich określonym lub domyślnym FetchType .
  2. EntityGraphType.FETCH - służy do określenia grafu encji, atrybuty określone przez węzły atrybutów grafu encji są traktowane jako FetchType.EAGER a atrybuty, które nie są określone, są traktowane jako FetchType.LAZY .

PS: Pamiętaj też, że możesz ustawić leniwy typ pobierania:@ManyToOne(fetch = FetchType.LAZY) a JPA nie będzie pobierać jednostek podrzędnych, gdy pobierany jest element nadrzędny.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql self JOIN zapytanie

  2. Mysql usuwa określone słowo w ciągu oddzielonym przecinkami

  3. Jak obliczyć rozmiar z mojego zapytania MySQL?

  4. Nie można pobrać klucza podstawowego identyfikatora niestandardowego po metodzie Laravel save()

  5. Pobierz tekst z pliku i wstaw go do tabeli mysql za pomocą skryptu