Terdapat 2 jenis relasi yakni :
- UniBidirectional : hanya di salah satu entity
- Bidirectional : di kedua entity
Note :
- nilai cascade bisa digunakan pada opposite class dan owner class (kedua class atau lebih), masing - masing class memiliki cascade itu boleh.
- jangan gunakan CascadeType.ALL lebih baik spesifik saja
- jangan gunakan
@Datapada entity, dapat menyebabkan cylic padatoString()
cascade = CascadeType.PERSIST= contohnya class user menggunakan anotasi@OneToOnekepada class role, maka ketika inisialisasi class user dan kita inputkan object role maka role akan otomatis diinsert juga (lihat pada kode class user dan role beserta testing).cascade = CascadeType.REFRESH= data pada context java spring dan database bisa jadi berbeda karena kompleksitas dari kode program, dengan menggunakan cascade refresh apabila di refresh maka kita akan mendapatkan nilai object yang sesuai pada saat itu dari database.cascade = CascadeType.DECATCH= ini digunakan ketika perubahan pada context object tidak ingin di insert ke database.cascade = CascadeType.DELETE= ini akan mendelete juga child dari entitiescascade = CascadeType.MERGE=fetch = FetchType.LAZY= ini digunakan ketika data relationship berupa collection, seperti pada@oneToManyatau@ManyToManyyang akan menggunakan collection, maka nilai defaultnya adalah lazy. Artinya data object tersebut tidak secara langsung diambil.fetch = FetchType.EAGER= berkebalikan dengan lazy, data object dari eager akan langsung diambil.orphanRemoval = trueini berarti pada entities owner dapat menghapus child, berbeda dengan cascade remove apabila owner dihapus maka child ikut terhapus, orphanRemoval dapat menghapus child saja tanpa parentmappedByini memberi tahu jpa bahwa sudah di konfigurasi pada class opposite
-
@OneToOneGunakan@JoinColumnpada entity yang memiliki foreign key entity lain@OneToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "role_id") private Role role;
-
@OneToManyPada oneToMany kita perlu menggunakan anotasi yang berbeda sesuai pada table/entity, yakni@OneToManydan@ManyToOne. Cara membaca/menentukannya dengan membaca entity pada class dan relasinya.// banyak film untuk 1 genre public class Film { @ManyToOne( cascade = {CascadeType.PERSIST}, fetch = FetchType.EAGER) @JoinColumn(name = "genre_id",referencedColumnName = "id") private Genre genre; }
-
ManyToManymany to many dapat memiliki beberapa cara, salah satunya adalah membuat table middle yang menyimpan id dari masing masing table. Kita perlu mendefinisikan nama table middle, dan petunjuk id foreign key yang disimpan disanapublic class Student { @ManyToMany( cascade = {CascadeType.PERSIST,CascadeType.REMOVE}, fetch = FetchType.EAGER ) @JoinTable( name = "student_course",// nama table middle joinColumns = @JoinColumn(name = "student_id"), // nama foreign key class ini pada table middle inverseJoinColumns = @JoinColumn(name = "course_id") // nama foreign key class opposite/sebelah pada table middle ) private List<Course> courses; }
-
-
untuk membuat query method yang digunakan adalah nama field, bukan nama field pada table ex :
// mencari by roleType -> nama field di entity
Optional<Role> findByroleType(RoleType name);@Entity: indentifikasi sebagai entity class, akan dibuatkan bean otomatis@Table: memberikan nama table spesifik ke class@Table(name="nama_table")@Id: identifikasi bahwa field tersebut berupa id@GeneratedValue: bagaimana nilai id dibuat- Strategy =
GenerationType.IDENTITYdigunakan untuk auto increment - Strategy =
GenerationType.UUIDdigunakan untuk uuid string - Strategy =
GenerationType.AUTOhibernate akan otomatis mengisi sesuai database - Strategy =
GenerationType.SEQUENCEbeberapa database seperti postgre memilikinya
- Strategy =
@Column: memberikan identitas pada field, dari nama kolom dan aturan pada column didatabase seperti not null atau unique@Enumerated: digunakan untuk tipe data enumEnumType.STRING= nilai enum akan dikonversi sebagai stringEnumType.ORDINAL= nilai enum akan dikonversi sebagai integer (x)
@Transactional: identifikasi bahwa pada method akan menggunakan transaksional@JoinColumn: identifikasi bahwa field foreign key@JoinColumn(name = "role_id")artinya pada class ini foreignkey ke entity sebelah menggunakan role_id pada table databasereferencedColumnName= memberi tahu bahwa foreign key ini references ke mana@JoinColumn(name = "role_id",referencedColumnName = "id")artinya class references pada opposite/class sebelah adalah id.
@JoinTabledigunakan seringnya pada many to many, karena biasanya many to many akan membuat middle table.@JoinTable(name = "student_course")di ini nama table middle.