sql >> Database >  >> RDS >> Mysql

Hoe een lichte Entity-versie te implementeren met Jpa-repository?

Spring biedt twee mechanismen die kunnen worden gebruikt om het ophalen van gegevens te beperken.

Projecties

Projecties kunnen u helpen om gegevens, opgehaald uit de database, te verminderen door in te stellen welke attributen u precies wilt ophalen.

Voorbeeld:

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

Entiteitsgrafiek

Annotatie EntityGraph kan u helpen het aantal zoekopdrachten naar de database te verminderen door in te stellen welke gerelateerde entiteiten u precies moet ophalen.

Voorbeeld:

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

Er zijn twee soorten EntityGraph :

  1. EntityGraphType.LOAD - wordt gebruikt om een ​​entiteitsgrafiek te specificeren, attributen die zijn gespecificeerd door attribuutknooppunten van de entiteitsgrafiek worden behandeld als FetchType.EAGER en attributen die niet gespecificeerd zijn, worden behandeld volgens hun gespecificeerde of standaard FetchType .
  2. EntityGraphType.FETCH - wordt gebruikt om een ​​entiteitsgrafiek te specificeren, attributen die zijn gespecificeerd door attribuutknooppunten van de entiteitsgrafiek worden behandeld als FetchType.EAGER en attributen die niet zijn gespecificeerd, worden behandeld als FetchType.LAZY .

PS: Onthoud ook dat u het luie ophaaltype kunt instellen:@ManyToOne(fetch = FetchType.LAZY) en JPA zal geen onderliggende entiteiten ophalen wanneer de bovenliggende entiteit wordt opgehaald.




  1. Hoeveel sneller is MyISAM vergeleken met InnoDB?

  2. sql:selecteer de meest gestemde items van elke gebruiker

  3. Een berekende kolom maken in een SQL Server 2008-tabel

  4. Selecteer ontgrendelde rij in Postgresql