2012-04-25 8 views
11

Bir ölçüt sorgusu sırasında bir varlığın geçici özniteliğini başlatmanın mümkün olup olmadığını merak ediyorum.Kriterler Sırası sırasında bir JPA öğesinin geçici özniteliğinin başlatılması

Örnek

@Entity 
public SampleEntity{ 

    @Id 
    private long id; 

    [more attributes] 

    @Transient 
    private String someTransientString; 

    [getters and setters] 
} 

Şimdi tüm SampleEntity s yükleyen bir CriteriaQuery oluşturmak istiyoruz ve otomatik imamightlyfinestring için someTransientString ayarlar. Aklımda şu SQL gibi bir şey var: tabii

SELECT ID AS ID, [..], 'imamightilyfinestring' AS SOME_TRANSIENT_STRING FROM SAMPLE_ENTITY 

ben sadece ortaya çıkan koleksiyon yineleme ve manuel niteliğini ayarlayabilirsiniz biliyorum ama JPA2 içinde bunu yapmak için bir yol olup olmadığını merak ediyorum .

Teşekkürler :)

cevap

11

Hayır, sorguda yapamazsınız. sorgu dışında someTransientString değer anlamaya Eğer

, sen (JPA 2.0 spesifikasyonu alıntı) PostLoad geri arama kullanabilir:

bir varlık için yükleme sonrası yöntemi varlık sonra çağırılmaktadır

yüklü olduğundan veritabanından geçerli kalıcılık içeriğine veya 'dan sonra yenileme işlemi uygulandı. PostLoad yöntemi, bir sorgu sonucu döndürülmeden veya erişilmeden önce veya ilişkilendirmeden önce çağrılan 'dır.

Sadece varlık aşağıdakileri ekleyin:

@PostLoad 
protected void initSomeTransientString() { 
    //Likely some more complex logic to figure out value, 
    //if it is this simple, just set it directly in field declaration. 
    someTransientString = "imamightilyfinestring"; 
} 
+0

sayesinde Tahmin etmiştim. – ftr