Jhipster 6 - Entity Relationship

Posted by dogukanhan on March 01, 2019 · 3 mins read

Bir önceki jhipster yazımda, entitiy tanımlanması ve kullanılabilecek paremetrelerden bahsetmiştim bu yazımda, biraz daha ilerletip entitylerimiz arasında ki ilişkileri sağlayan kod parçalarına gözatacağız.

Entitiy ilişkileri birden fazla şekilde olabilmekte. Bunlar One to One, One to Many, Many to One ve Many to Many olmak üzere dört adettir. Her bir ilişki için farklı tanımlamalar yapılması gerekebilir.

Entitylerimiz arasındaki ilişkiler JDL dili tarafından relationship kodu ile tanımlanır. Hemen arkasından ilişkinin türü belirtilir ve süslü parentezler içerisinde hangi entityden hangi entity’e ilişkinin olduğu “to” kelimesi kullanılarak belirtilir. Bunun dışında ilişki arasında gerekiyorsa alanların ismine yönelik tanımlamalar yapılabilir.

relationship (OneToMany | ManyToOne | OneToOne | ManyToMany) {
  <from entity>[{<relationship name>[(<display field>)]}] to <to entity>[{<relationship name>[(<display field>)]}]
}

Yukarıdaki örnek relationship kodunun en genel halini göstermektedir. Bir kaç örnek ile bu kodun nasıl kullanıldığına bakalım.

One To One Relationship

entity Post{
	title String
    summaryContent String
    postImage String
}
entity PostInfo{
	content String
    tags String
    categories String
}
relationship OneToOne{
	Post to PostInfo
}

Post ve PostInfo’nun belirtlildiği iki farklı entitiy arasında ilişki kurulmuştur, her bir post’a karşılık bir tane postinfo bulunmakta. Post sınfı içerisinde @JoinColumn kullanılmış, bu aslında tablo yapımızda foreign keyin bu sınıf içerisinde yer almasını sağlamaktadır. Eğer relationship satırımızda PostInfo to Post yapsaydık, foreign key PostInfo tablosunda olucaktı.

JPA tarafından oluşturulan POST tablo yapısı.
JPA tarafından oluşturulan POST_INFO tablo yapısı.
// Post sınıfı içerisi
@OneToOne
@JoinColumn(unique = true)
private PostInfo postInfo;

// Post info sınıfı içerisi
@OneToOne(mappedBy = "postInfo")
@JsonIgnore
private Post post;

One To Many Relationship

Birden çoğa olan ilişki yönüne bağlı olarak tablo veya ekstra sütun kullanılarak yapılabilir. Jhipster sınıflarda birectional ilişki kurduğu için hem tablo hemde sutün kullanacaktır. Bidirectional ilişkide iki sınıf içerisinden de diğer ilişkisinin olduğu sınıfa erişim sağlanabilir.

entity Post{
	title String
    summaryContent String
    postImage String
}
entity Category{
	name String
    description String
}
relationship OneToMany{
	Post to Category
}
JPA tarafindan oluşturulan CATEGORY tablosu
JPA tarafından oluşturulan POST Tablosu

Bu yapıda her bir Post için birden fazla Categori bulunmaktadır ve Post tablosunda postun hangi kategoriye ait olduğunu belirten POST_ID satırı bulunmaktadır. Jhipster tarafından üretilen JPA java kodları ise aşağıdadır.

// Category sınıfı içerisinde.    
@OneToMany(mappedBy = "post")
private Set<Category> categories = new HashSet<>();

// Post sınıfı içerisinde
@ManyToOne
@JsonIgnoreProperties("categories")
private Post post;

Many To One Relationship

Aynı şekilde Post ve Category arasında Many To Many relationship kurulabilir.

entity Post{
	title String
    summaryContent String
    postImage String
}
entity Category{
	name String
    description String
}
relationship ManyToMany{
	Post to Category
}