Giriş
OneToMany unidirectional veya bidirectional olabilir. Bidirectional ilişki tercih edilmeli. Şeklen şöyle
OneToMany unidirectional veya bidirectional olabilir. Bidirectional ilişki tercih edilmeli. Şeklen şöyle
1. Unidirectional
JPA OneToMany İlişki - Unidirectional yazısına taşıdım.
2. Bidirectional
JPA OneToMany İlişki - Bidirectional yazısına taşıdım.
3. Diğer Özellikler
Field ve Getter Method İle Kullanım Örnekleri
Örnek
@OneToMany genellikle field üzerine yazılır.Şöyle yaparız.
@OneToMany getter() metod ile de kullanıbilir. şöyle yaparız.
Çoğunlukla ALL seçeneği ile kullanılır. Parent nesneye yapılan insert,update,delete gibi işlemler child nesneleri de etkiler. cascade many nesneye konulur. Şöyle yaparız.
fetch Alanı
Açıklaması şöyle.
Eğer FetchType tanımlı değilse LAZY olduğu varsayılır. İlişkinin many tarafını yüklemek için bir sürü SQL cümlesinin çalışmasına sebep olur.
FetchType - Eager
LAZY'den EAGER'a dönüş kolay ancak EAGER'dan LAZY'ye zor dönülüyor. EAGER şöyle tanımlanır.
JPA orphanRemoval Alanı yazısına taşıdım.
targetEntity Alanı
Açıklaması şöyle.
Normalde şöyle yaparız.
Field ve Getter Method İle Kullanım Örnekleri
Örnek
@OneToMany genellikle field üzerine yazılır.Şöyle yaparız.
@Entity
public class Filter {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
@OneToMany
@JoinColumn(name = "filter_id")
private List<FilterComponents> filterComponenets;
}
@Entity
public class FilterComponents {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private int component_id;
private int component_type;
...
}
Örnek@OneToMany getter() metod ile de kullanıbilir. şö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) { ... }
...
}
cascade AlanıÇoğunlukla ALL seçeneği ile kullanılır. Parent nesneye yapılan insert,update,delete gibi işlemler child nesneleri de etkiler. cascade many nesneye konulur. Şöyle yaparız.
@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name = "companyId")Company company;
fetch Alanı
Açıklaması şöyle.
For this relationship type, the default data loading method is LAZY: every time you ask for A, the B will not be retrieved.FetchType - Lazy
Eğer FetchType tanımlı değilse LAZY olduğu varsayılır. İlişkinin many tarafını yüklemek için bir sürü SQL cümlesinin çalışmasına sebep olur.
FetchType - Eager
LAZY'den EAGER'a dönüş kolay ancak EAGER'dan LAZY'ye zor dönülüyor. EAGER şöyle tanımlanır.
@Entity
public class Person {
@Column
private String name;
@OneToMany(fetch=FetchType.EAGER)
private List<String> address;
}
Query query = EntityManager.createQuery("FROM Person person");
//list of person without the address list! But how???
List<Person> resultList = query.getResultList();
orphanRemoval AlanıJPA orphanRemoval Alanı yazısına taşıdım.
targetEntity Alanı
Açıklaması şöyle.
ÖrnekIf the collection is defined using generics to specify the element type, the associated target entity type need not be specified; otherwise the target entity class must be specified.
Normalde şöyle yaparız.
@OneToMany(mappedBy = "user")
private List<Vote> votes;
Eğer generic tip kullanmıyorsak şöyle yaparız.@OneToMany(targetEntity=logic.Vote.class, mappedBy = "user")
private List votes;
Hiç yorum yok:
Yorum Gönder