sql >> Databáze >  >> RDS >> Mysql

Jak implementovat verzi light Entity s úložištěm Jpa?

Spring poskytuje dva mechanismy, které lze použít k omezení načítání dat.

Projekce

Projekce vám mohou pomoci snížit data získaná z databáze tím, že nastavíte, jaké přesně atributy chcete načíst.

Příklad:

@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);
}

Graf entit

Anotace EntityGraph vám může pomoci snížit množství dotazů do databáze nastavením toho, jaké přesně související entity potřebujete načíst.

Příklad:

@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
}

Existují dva typy EntityGraph :

  1. EntityGraphType.LOAD - používá se k určení grafu entit, atributy, které jsou určeny uzly atributů grafu entit, jsou považovány za FetchType.EAGER a atributy, které nejsou specifikovány, jsou zpracovány podle jejich zadaného nebo výchozího FetchType .
  2. EntityGraphType.FETCH - používá se k určení grafu entit, atributy, které jsou určeny uzly atributů grafu entit, jsou považovány za FetchType.EAGER a atributy, které nejsou specifikovány, jsou považovány za FetchType.LAZY .

PS: Pamatujte také, že můžete nastavit typ pomalého načítání:@ManyToOne(fetch = FetchType.LAZY) a JPA nebude načítat podřízené entity, když je načítána rodič.




  1. Více podmínek v jednom IF ve výběrovém dotazu

  2. Vybírejte databáze dynamicky

  3. t-sql select získat všechny měsíce v rozmezí let

  4. Přidání INNER JOIN do dotazu s poddotazem s příkazem Inline Select