Java EE için oldukça yeni olduğumu ve Java'da henüz güçlü bir teorik arka plana sahip olmadığımı söyleyerek işe koyulmalıyım.Arabirimler ve JPA ile çalışma nasıl yapılır
JPA
'un Java'da interfaces
ile birlikte nasıl kullanıldığını anlamakta zorlanıyorum. Zor bulduğumu göstermek için çok basit bir örnek oluşturdum.
Ben iki basit arayüzleri Person
ve Pet
varsa: Ben düzgün işlemek nasıl
@Entity
public class PersonEntity implements Person
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private PetEntity pet;
@Override
public void setPet(Pet pet)
{
/* How do i solve this? */
}
}
@Entity
public class PetEntity implements Pet
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
/* Getters and Setters omitted */
}
:
public interface Person
{
public Pet getPet();
public void setPet(Pet pet);
}
public interface Pet
{
public String getName();
}
Ve Person
uygulayan bir Varlık PersonEntity
yanı sıra Pet
uygulayan bir PetEntity
Yukarıdaki iki varlık arasındaki ilişkileri devam ettirmek istediğim setPet
yönteminde durum nedir?
Arabirimleri kullanmak istememin temel nedeni, modüller/katmanlar arasındaki bağımlılıkları ortak arabirimlere tutmak istememdir. Başka bir şekilde, örneğin ManagedBean'ım doğrudan bir varlığa mı?
Birisi, varlıklar üzerindeki arabirimleri kullanmamaya karşı önerirse, lütfen hangi yöntem veya desenlerin var olduğunu açıklayın.
Çalışacağından emin misiniz? Kapalı alan erişimi kullanıyorsunuz, ancak sette "@ OneToOne" açıklamasını ayarlıyorsunuz. Dahası, mülk erişimi ile bile, bu açıklama işe yarayacak mı? Setter yerine getterde olmamalı mı? –
Mairbek, ve ne tür bir alana erişim sağlama konusunda? Bu durumda JPA 2.0 özelliklerinin bu bölümünün alakalı olduğunu düşünüyor musunuz: * "Açıklamanın ek açıklamasını belirtmeden, bir açıklama hiyerarşisi içindeki alanların ve özelliklerin ek açıklamaların yerleşimini karıştıran uygulamaların davranışı tanımsızdır." *? –
Tabii ki sadece 1 kişinin uygulaması olduğu sürece çalışır. 1'den fazla zamanınız olduğunda, arayüz alanları için uygulamada açık desteğe ihtiyacınız olacaktır. – user383680