sql >> Database teknologi >  >> RDS >> Mysql

Hvordan implementerer man lys Entity version med Jpa repository?

Spring giver to mekanismer, der kan bruges til at begrænse data, der skal hentes.

Projektioner

Projektioner kan hjælpe dig med at reducere data, hentet fra databasen, ved at indstille præcis, hvilke attributter du vil hente.

Eksempel:

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

Enhedsgraf

Annotation EntityGraph kan hjælpe dig med at reducere mængden af ​​forespørgsler til databasen ved at indstille, hvilke præcist relaterede enheder du skal hente.

Eksempel:

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

Der er to typer EntityGraph :

  1. EntityGraphType.LOAD - bruges til at specificere en entitetsgraf, attributter, der er specificeret af attributknuder i entitetsgrafen, behandles som FetchType.EAGER og attributter, der ikke er specificeret, behandles i henhold til deres specificerede eller standard FetchType .
  2. EntityGraphType.FETCH - bruges til at specificere en entitetsgraf, attributter, der er specificeret af attributknuder i entitetsgrafen, behandles som FetchType.EAGER og attributter, der ikke er specificeret, behandles som FetchType.LAZY .

PS: Husk også, at du kan indstille lazy fetch type:@ManyToOne(fetch = FetchType.LAZY) og JPA vil ikke hente underordnede enheder, når forælderen hentes.




  1. Er der en nem måde at få EntityFramework til at bruge SQL-standardværdier?

  2. Returner fremmednøgle med DQL-forespørgsel

  3. Giver mysql CLI-værktøjet en måde at vise binære data på en konsolvenlig måde?

  4. SQL Injection beskyttelse med kun str_replace