Hibernate - @Table

Posted by dogukanhan on June 06, 2020 · 2 mins read

Table annoation çoğunlukta veritabanındaki entity’e karşılık gelen tablonun isminin belirlenmesinde kullanlır.

Veritabanı tablosunun isminin çoğul olmasını istiyebiliriz fakat entity sınıfının isminin çoğul olması kafa karıştırıcı olabililir çünkü bir kullanıcı oluşturulmak istenirse new User() yapılması new Users() yapılmasından daha mantıklıdır. Bir başka durum ise veritabanında kullanılmayacak kelimelerin entity ismi olarak kullanılmasıdır “user” çoğu veritabanında ayrılmıştır ve tablo ismi olarak kullanılması engellenmiştir bu yüzden kod hata verebilmektedir.

@Table annotation kullanılarak yapılan bir örnek.

@Entity
@Table(name="Users")
public class User {
    @Id
    @GeneratedValue
    private Long id;

    public Long getId() {
        return id;
    }
}

JPA’de yer alan @Table Annotation parametreleri:

  • name: Veritabanında yer alan tablonun ismi için kullanılmaktadır.
  • catalog: Tablonun katoloğunu belirler.
  • schema: Tablonun schemasını belirler.
  • uniqueConstraints: Tabloda yer alacak benzersiz sabitleri belirler.
  • indexes: Tabloda yer alacak indexleri belirler.

UniqueConstraints ve indexes ile ilgili bir ornek, name farkli kayitlarda ayni degerleri alamaz ve benzersizdir. Name icin index oluşturulmuştur.

@Entity
@Table(name = "Users", uniqueConstraints =
@UniqueConstraint(name = "constraint1", columnNames = {"name"}),
        indexes = @Index(name = "name_index", columnList = "name")
)
public class User {

    @Id
    @GeneratedValue
    private Long id;

    private String name;
}

Hibernate’de yer alan @Table Annotation parametreli

  • appliesTo: Buraya bu Annotation’un uygulanacağı tablonun ismi yazılır. Bu parametre ya entity ismine yada JPA’de kullanılan name parametresinin değerine eşit olmalıdır.
  • comment: Tabloya bir yorum ekler.
  • foreignKey: Başka bir tablo için ikincil anahtar eklenebilir

Aşağıdaki özellikler sadece SecondaryTable için kullanılabilir.

  • fetch: Fetch stratejisini belirler, diğer tablolarla olan ilişkilerinde kullanılır.
  • inverse
  • optional
  • sqlInsert: Insert için buraya yazılan sorgu kullanılır.
  • sqlUpdate: Update sorgusu için buraya yazılan sorgu kullanılır.
  • sqlDelete: Delete sorgusu için buraya yazılan sorguyu kullanır.