Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để triển khai phiên bản ligh Entity với kho lưu trữ Jpa?

Spring cung cấp hai cơ chế có thể được sử dụng để giới hạn dữ liệu được tìm nạp.

Phép chiếu

Phép chiếu có thể giúp bạn giảm bớt dữ liệu, được truy xuất từ ​​cơ sở dữ liệu, bằng cách đặt chính xác những thuộc tính bạn muốn tìm nạp.

Ví dụ:

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

Biểu đồ thực thể

Chú thích EntityGraph có thể giúp bạn giảm số lượng truy vấn đến cơ sở dữ liệu, bằng cách đặt những thực thể liên quan chính xác mà bạn cần tìm nạp.

Ví dụ:

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

Có hai loại EntityGraph :

  1. EntityGraphType.LOAD - được sử dụng để chỉ định một biểu đồ thực thể, các thuộc tính được chỉ định bởi các nút thuộc tính của biểu đồ thực thể được coi là FetchType.EAGER và các thuộc tính không được chỉ định được xử lý theo FetchType được chỉ định hoặc mặc định của chúng .
  2. EntityGraphType.FETCH - được sử dụng để chỉ định một biểu đồ thực thể, các thuộc tính được chỉ định bởi các nút thuộc tính của biểu đồ thực thể được coi là FetchType.EAGER và các thuộc tính không được chỉ định được coi là FetchType.LAZY .

Tái bút: Cũng nên nhớ rằng bạn có thể đặt kiểu tìm nạp lười:@ManyToOne(fetch = FetchType.LAZY) và JPA sẽ không tìm nạp các thực thể con khi mẹ đang được tìm nạp.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo nâng cấp từ MySQL 5.7 lên MySQL 8

  2. Cách liên kết mysqlcppconn.lib với một dự án c ++

  3. Làm thế nào để tìm theo nhiều tiêu chí với Phalcon findFirst?

  4. Chơi 2.4 - Slick 3.0.0 - DELETE không hoạt động

  5. Có sự khác biệt về hiệu suất giữa BETWEEN và IN với MySQL hoặc trong SQL nói chung không?