Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara mengimplementasikan versi Entity ringan dengan repositori Jpa?

Spring menyediakan dua mekanisme yang dapat digunakan untuk membatasi data yang akan diambil.

Proyeksi

Proyeksi dapat membantu Anda mengurangi data, yang diambil dari database, dengan menyetel atribut apa yang ingin Anda ambil.

Contoh:

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

Grafik entitas

Anotasi EntityGraph dapat membantu Anda mengurangi jumlah kueri ke database, dengan menyetel entitas terkait apa yang perlu Anda ambil.

Contoh:

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

Ada dua jenis EntityGraph :

  1. EntityGraphType.LOAD - digunakan untuk menentukan grafik entitas, atribut yang ditentukan oleh node atribut dari grafik entitas diperlakukan sebagai FetchType.EAGER dan atribut yang tidak ditentukan diperlakukan sesuai dengan FetchType yang ditentukan atau defaultnya .
  2. EntityGraphType.FETCH - digunakan untuk menentukan grafik entitas, atribut yang ditentukan oleh node atribut dari grafik entitas diperlakukan sebagai FetchType.EAGER dan atribut yang tidak ditentukan diperlakukan sebagai FetchType.LAZY .

PS: Ingat juga bahwa Anda dapat menyetel jenis pengambilan lambat:@ManyToOne(fetch = FetchType.LAZY) dan JPA tidak akan mengambil entitas anak saat induk diambil.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. API Kriteria Hibernasi:dapatkan n baris acak

  2. Cara menjalankan skrip .sql dari bash

  3. Apakah ada daftar tipe data dalam prosedur tersimpan MySQL, atau cara untuk menirunya?

  4. atur sesi dalam objek sesi SQLAlchemy

  5. Bagaimana cara mendapatkan data dari tabel lain menggunakan data kolom dari tabel yang berbeda?