@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)
và @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
và
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.