2012-02-12 37 views
7

JPA'da ya da hazırda bekletme için hazırda bekletme yapmak için hazırda bekletme modunu kullanmak üzere bir açıklama olduğunu hatırlıyorum (özelliklerimizi annotate ediyoruz). Bu ayar olmadan getId, veritabanına vurmak ve istediğim gibi olmayan nesnenin tüm alanlarını doldurmakla sonuçlanır. Bu notun ne olduğunu bilen var mı?hibernate getId tempolu olsa bile nesneyi yüklüyor

Örnek:

public void Project { 
    @Id 
    //Other annotation forcing hibernate to use property get/settter 
    public Long id; 
} 

public Ticket { 
    @ManyToOne(lazy=true) 
    public Project project; 
} 

yüzden, id hazırda proje proxy nesnesi zaten olduğunda projeyi almak için veritabanını isabet içinde ticket.getProject.getId() sonuçlanır. Ek açıklama hatırladığım şeyi düzeltir.

sayesinde Dekan

cevap

12

Sen saha erişimi yerine mülkiyet erişimini kullanarak kimliğine erişmek için Hazırda söylemek gerekir:

@Id 
@Access(AccessType.PROPERTY) 
private Long id; 

Gerçekten alanları kamu yapmamalı.

+0

Biraz daha ayrıntıyla bağlantıya geçin; http://256.com/gray/docs/misc/hibernate_lazy_field_access_annotations.shtml –

+0

Üzgünüm, playframework'ı kullanıyorum ve bir süre sonra alıştınız. Kamu alanlarını kendim sevmiyorum, ama scala kullandıktan sonra, java'nın kodlamayı azaltmak için böyle bir şey yapmasını isterdim. –

+0

sürgün, bu her bir sınıf için bir uyarı oluşturur, JPA spec açıklamasının ek açıklamaların getId yöntemine gitmesi gerektiğini söyler, ancak oraya taşımak sadece bir istisna ile sonuçlanır ve hiç çalışmaz. Bu günlerde bunu nasıl yapıyor? (Bu alanı tarlada kullandım ama hazırda bekletme özel olabilirdi) ... teşekkürler. –

İlgili konular