Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да внедрите версия на ligh Entity с Jpa хранилище?

Spring предоставя два механизма, които могат да се използват за ограничаване на извличането на данни.

Прогнози

Прогнозите могат да ви помогнат да намалите данните, извлечени от базата данни, като зададете какви точно атрибути искате да извлечете.

Пример:

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

Графика на обект

Анотация EntityGraph може да ви помогне да намалите количеството заявки към базата данни, като зададете какви точно свързани обекти трябва да извлечете.

Пример:

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

Има два вида EntityGraph :

  1. EntityGraphType.LOAD - се използва за указване на графа на обект, атрибутите, които са посочени от възлите на атрибута на графиката на обекта, се третират като FetchType.EAGER и атрибутите, които не са посочени, се третират според техния зададен или по подразбиране FetchType .
  2. EntityGraphType.FETCH - се използва за указване на графа на обект, атрибутите, които са посочени от възлите на атрибута на графиката на обекта, се третират като FetchType.EAGER и атрибути, които не са посочени, се третират като FetchType.LAZY .

PS: Също така не забравяйте, че можете да зададете тип отложено извличане:@ManyToOne(fetch = FetchType.LAZY) и JPA няма да извлича дъщерни обекти, когато родителят се извлича.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL ограничение SELECT, но не JOIN

  2. Пролетно зареждане - настройките на MySQL не работят

  3. Разделете (разгънете) стойности на колони, разделени със запетая, на редове

  4. Solr търсене с Mysql Database, всяка помощна програма за импортиране на данни

  5. MySQL грешка #1005 (код 150)