8 Ağustos 2011 Pazartesi

Hibernate ile Abstract Sınıfı Veritabanına Kaydetme - 2

Herkese Merhabalar,

Bugün yine Hibernate frameworku ile devam ediyoruz. Bu seferki problem oldukça karışık, benim için anlatması sizin için anlaması zor olacak sanırım ama deneyeceğiz bakalım :)

Elimizde bir adet abstract sınıf var, 2 tane de bundan türeyen POJO sınıf, bir tane de bu abstract sınıfla has-a-relation bağlantısı olan Java sınıfı. Şöyle düşünebilirsiniz, son bahsettiğim java sınıfı bir sürücü. Bir sürücü çeşitli araçlar sürebilir, traktör, kamyon vs. İşte bu sürdüğü arabayı temsilen içinde bir abstract sınıf var, taşıt oluyor bu da. 2 adet POJO sınıfımız da taşıt türleri oluyor, otobüs ve kamyon atıyorum. Bunlar abstract sınıfı extend ediyor daha önce dediğim gibi. Böylelikle bütün sürücüler için sürdüğü aracın türünü belirtmeden esnek bir şekilde tutabiliyoruz. Bun OOP olarak gerçekleştirmekte bir sorun yok ama, Hibernate ile veritabanına kaydedecekken biraz sorun çıkabiliyor. Bu da aslında daha önceki yazımda bahsettiğim @MappedSuperClass annotationu ile denemem sonucu oluştu sanırım. @MappedSuperClass annotationu verdiğimiz bir sınıfı başka bir sınıf içerisinde has-a-relation ilişkisiyle bulundurduğumuz zaman bir sorun çıkıyor. Burada bu annotationu @Entity ile değiştirmemiz gerekiyor. Aşağıda basitçe yazacağım kullanmamız gereken annotationları, umarım faydalı olur.

Bus.Java
@Entity
@Table(name="BUS")

public class Bus extends Vehicle{
...
}
Truck.Java
@Entity
@Table(name="TRUCK")

public class Truck extends Vehicle{

...
}
Driver.Java
@Entity
@Table(name="DRIVER")

public class Driver {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="ID")
    private int driverId;  
    

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="Vehicle_Id")
    private Vehicle vehicle;

...

Vehicle.Java
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

public abstract class Vehicle {
...
}

Kafanıza takılan sorular olursa çekinmeden sorabilirsiniz. Herkese kolay gelsin.

Hiç yorum yok:

Yorum Gönder