Skip to main content

Table Views

16 November 2023

Cara baca table views di spring boot, sama persis seperti membaca table biasa (dengan class entity).

Ada beberapa cara untuk generate table views dari Spring Boot, namun masih memiliki banyak celah. Jika dibuat seperti seeder, maka akan sia - sia karena class entity akan bikin duluan table nya (Ingat, cara baca table views = cara baca table biasa), baru seeder jalan.

Namun, spring boot ada cara nya sendiri dalam memanfaatkan table views ini, yaitu Spring Boot membuat table views sendiri di HIbernate nya. Yang artinya, Table views tidak ada di database, hanya ada di Hibernate nya Spring Boot

How to Create Entity Class

Tidak perlu ada Setter untuk class views, ini salah satu cara untuk mengatasi programmer yang update data ke class views

Sample File
@Getter
@Entity
@Immutable
@Subselect("select u.id, \n" +
"u.id_ext, \n" +
"u.email as user_email, \n" +
"u.name as user_name, \n" +
"u.created_date,\n" +
"p.code position_code, \n" +
"case \n" +
"\twhen p is null then u.position\n" +
"\telse p.name\n" +
"end position_name, \n" +
"lo.name as location, \n" +
"la.name as layer, \n" +
"p.caretaker, p.use_caretaker \n" +
"from users u \n" +
"left join position p on u.id_ext = p.user_id_ext \n" +
"left join users_location lo on u.location_code = lo.code \n" +
"left join users_layer la on u.layer_code = la.code \n" +
"where u.email is not null and u.delete_at is null and p.delete_at is null")
public class DataUser {
@Column(name = "id")
private UUID id;
@Column(name = "created_date")
private Date createdDate;
@Column(name = "position_code")
private String code;
@Column(name = "position_name")
private String name;
@Column(name = "user_email")
private String userEmail;
@Column(name = "user_name")
private String userName;
@Column(name = "location")
private String location;
@Column(name = "layer")
private String layer;
@Column(name = "caretaker")
private String caretaker;
@Column(name = "use_caretaker")
private Boolean useCaretaker;
}

Pada sample diatas, yang jadi perhatian adalah @Immutable dan @Subselect

Immutable merupakan annotation yang mengatasi masalah query update yang masuk ke class nya. Jadi, dengan ada nya immutable ini, kita tidak perlu handle untuk update data yang akan terjadi di class nya. Baca Selengkapnya

Subselect, annotation ini lah yang paling diperlukan jika class tersebut merupakan sebuah class dari table Views karena annotation ini untuk mengatur class nya akan mempunyai data seperti query yang udah di define di annotation tersebut.