20 Eylül 2018 Perşembe

@LazyCollection Anotasyonu

Giriş
Eager yükleme için kullanılır. Normalde JPA'nın şu özelliğini kullanmak daha iyi
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY, orphanRemoval = true)
value Alanı
Örnek
OneToMany ile kullanılabilir. Şöyle yaparız.
@Entity(name = "product")
@Table(name = "products", schema = "${DB_NAME}", catalog = "")
public class ProductEntity {
  ...
  private List shipments = new ArrayList<>();

  
  @OneToMany(mappedBy = "shipmentID", targetEntity=ShipmentEntity.class)
  @LazyCollection(LazyCollectionOption.FALSE)
  public Collection<ShipmentEntity> getShipments() { ... }
  public void setShipments(Collection<ShipmentEntity> shipments) { ... }
  ...
}
Örnek LazyCollectionOption.FALSE
ManyToMany ile kullanılabilir. Şöyle yaparız.
@Entity
public class Product implements Serializable {
 ...

  @ManyToMany
  @LazyCollection(LazyCollectionOption.FALSE)
  @JoinTable(joinColumns = @JoinColumn(name = "productId"),
    inverseJoinColumns = @JoinColumn(name = "colorId"))
 private List<Color> colorList;
  ...
}
@Entity
public class Color implements Serializable {
  ... 
  @ManyToMany(mappedBy="colorList")
  private List<Product> productList;
}
OneToMany
OneToMany ile kullanılabilir. Şöyle yaparız.
@Entity
@Table(name = "COMPANY")
public class Company {


  @OneToMany
  @LazyCollection(LazyCollectionOption.FALSE)
  @JoinTable(name = "COMPANY_2_LOCATIONS",
    joinColumns = {@JoinColumn(name = "COMPANY_ID", referencedColumnName = "ID")},
    inverseJoinColumns = {@JoinColumn(name = "LOCATION_ID", referencedColumnName = "ID")})
  private List<Location> locations;
  ...

}

Hiç yorum yok:

Yorum Gönder