Hibernate - Dynamic Sql Generation

Posted by dogukanhan on June 07, 2020 · 1 min read

Varsayılanda hibernate persistence unit oluşturulduğunda her entity sınıfı için sql sorguları oluşturur. Bu sql sorguları CRUD olarak adlandırdığımız create, read, update ve delete sorgularıdır. Her seferinde bu sorguların tekrardan oluşturulması yerine hafıza tutulması daha avantajlı olduğudan dolayı bu işlem yapılır.

Hibernate içerisinde üretilen bu sorgular bütün entity içerisindeki bütün column’ları içermektedir ve örnek olarak bir update sorgusu yapıldığında bütün column’lar update edilmektedir bu ise önceden üretilen sorguların dezavantajıdır.

Eğer bir update işlemi yapıldığında sadece değişen column’un update edilmesini istiyorsak hibernate tarafından değişen colum’a özgü bir updadate sorgusu üretmesini isteriz. Buda dynamic sql generation olarak adlandırılır. Sadece insert ve update için dynamic seçenekleri mevcuttur ve aşağıdaki Annotation’lar kullanılmalıdır.

@org.hibernate.annotations.DynamicUpdate
@org.hibernate.annotations.DynamicInsert
@Entity
public class Student {

    @Id
    @GeneratedValue
    private Long id;

    public Long getId() {
        return id;
    }

    private String name;


    private String lastName;


    private String email;


    private String password;
}

Yukarıdaki sınıfa ait bir nesne için name’i değiştirip update edelim.

@DynamicUpdate kullanmadan update sorgusu çalıştırırsak aşağıdaki update sorgusu veritabanında çalışır.

update Student set email=?, lastName=?, name=?, password=? where id=?

Eğer @DynamicUpdate kullanırsak

update Student set name=? where id=?