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

dữ liệu mùa xuân jpa còn lại không cần thiết

@Entity
class Institucion {
  @ManyToOne(fetch=FetchType.LAZY)
  @JoinColumn(name="`sectorId`")
  private Sector sector;
}

tương đương với:

@Entity
class Institucion {
  @ManyToOne(cascade = {}
             , fetch=FetchType.LAZY
             , optional = true
             , targetEntity = void.class)
  @JoinColumn(columnDefinition = ""
             , foreignKey = @ForeignKey
             , insertable = true
             , name="`sectorId`"
             , nullable = true
             , referencedColumnName = ""
             , table = ""
             , unique = false
             , updatable = false)
  private Sector sector;
}

Lưu ý @ManyToOne(optional = true)@JoinColumn(nullable = true) . Điều này biểu thị cho ORM rằng sector thuộc tính của Institucion là tùy chọn và có thể không được đặt (thành giá trị khác rỗng) mọi lúc.

Bây giờ hãy xem xét kho lưu trữ sau:

public interface InstitucionRepository extends CrudRepository<Institucion, Long> {
  List<Institucion> findAllByInstitucionNombre(String nombre);

  List<Institucion> findAllByInstitucionEmail(String email);
}

Với khai báo thực thể ở trên, các phương thức kho lưu trữ sẽ tạo ra các truy vấn như:

select
    generatedAlias0 
from
    Institucion as generatedAlias0 
left join
    generatedAlias0.sector as generatedAlias1 
where
    generatedAlias0.institucionNombre=:param0

select
    generatedAlias0 
from
    Institucion as generatedAlias0 
left join
    generatedAlias0.sector as generatedAlias1 
where
    generatedAlias0.institucionEmail=:param0

Điều này là do mô hình thực thể chỉ ra sector là tùy chọn nên ORM cần tải Institucion s mà không phải lo lắng về sector của chúng s.

Theo mẫu này, phương pháp lưu trữ sau:

  List<Institucion> findAllBySector(Sector sector);

dịch thành:

select
    generatedAlias0 
from
    Institucion as generatedAlias0 
left join
    generatedAlias0.sector as generatedAlias1 
where
    generatedAlias1=:param0

Nếu Institucion.sector không phải là tùy chọn, cũng bắt buộc trong mô hình:

  @ManyToOne(fetch=FetchType.LAZY, optional = false)
  @JoinColumn(name="`sectorId`", nullable = false)
  private Sector sector;

Nếu Institucion.sector thực sự là tùy chọn, chỉ một truy vấn thủ công như truy vấn được hiển thị trong câu trả lời của @ MaciejKowalski mới hoạt động.

Truy vấn sau cũng sẽ hoạt động:

  List<Institucion> findAllBySectorSectorId(Long id);

Điều này giả định rằng tên thuộc tính mô hình chính xác như được hiển thị trong bài đăng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL / JDBC và TIMESTAMP so với TIMESTAMPTZ

  2. Các mối đe dọa bảo mật PostgreSQL hàng đầu

  3. vấn đề về loại dữ liệu nối tiếp pg_dump

  4. Thư viện ODBC v Libpq:C cho PostgreSQL

  5. Kết nối với Postgresql trong một thùng chứa docker từ bên ngoài