2012-04-09 29 views

cevap

5

Evet. Yalnızca @Basic(fetch=FetchType.LAZY) tarafından @Formula özelliğinin alanlarını/notlarını ekleyerek girin ve varlık sınıfı için bytecode araçlarını yapmak üzere hazırda bekletme tarafından sağlanan bu ant task kullanın. Aksi takdirde, @Formula özelliğinin LAZY yüklemesi sessizce yoksayılır. documentation

bytecode enstrümantasyon yapmak için bu karınca görevi nasıl kullanılacağı ile ilgili bilgi içermektedir.

+0

Cevabınız için teşekkürler, ne maven hakkında? maven'deki bu "bytecode instrumentation" şeyini elde etmenin bir yolu var mı? Çünkü maven kullanıyorum ve karınca ile hiçbir ilgim yok. – destan

+0

, Maven’deki Ant görevlerini çalıştırabilen 'maven-antrun-plugin' eklentisini kullanabilirsiniz. Bkz: http: //doginpool.blogspot.com/2012/03/bytecode-instrumentation-for-hibernate.html –

+0

Marangozda bayt kodu: http://tricksdev.blogspot.ru/2009/03/hibernate-bytecode –

2

Yorumda bytecode cihazları olmadan bunu gerçekleştirmek istediğinizi gördüm. Bu, FieldHandled arayüzünün uygulanmasıyla ve tembel alan için alıcıları ve ayarlayıcıları değiştirerek elde edilebilir.

HBM

<property name="deletable" type="true_false" lazy="true"> 
    <formula>(select something from other tables and such....)</formula> 
</property> 

JAVA

import org.hibernate.bytecode.javassist.FieldHandled; 
import org.hibernate.bytecode.javassist.FieldHandler; 
public class Person implements FieldHandled { 

/* allows lazy formulas without hibernate bytecode instrumentation */ 
private FieldHandler fieldHandler; 
public FieldHandler getFieldHandler() { return fieldHandler; } 
public void setFieldHandler(FieldHandler fieldHandler) { this.fieldHandler = fieldHandler; } 


private Boolean deletable; 

public void setDeletable(Boolean deletable) { 
    if(fieldHandler!=null) 
     fieldHandler.writeObject(this, "deletable", this.deletable, deletable); 
    this.deletable = deletable; 
} 

public Boolean getDeletable() { 
    if(fieldHandler!=null) 
     return (Boolean)fieldHandler.readObject(this, "deletable", deletable); 
    return deletable; 
} 
} 

Bir başka örnek here bulunabilir. Ama bu bire bir ilişki yükleme tembel.

+0

-instrumentation.html Ben senin çözüm çalıştı ama ben 'org.hibernate.engine.spi.EntityEntry.isUnequivocallyNonDirty (EntityEntry.java:314)' herhangi fikri üzerine bir NPE var? Ve hangi hazırda bekleme sürümünü kullandınız? – Kakawait

+0

@Kakawait Üzgünüm, tam olarak bilmiyorum. Bu kodu bir süre önce yazdım ve 3.x olduğuna inanıyorum (burada x bilinmiyor) – Danny

+0

Bu benim için çalıştı: setter için fieldHandler'ı kullanmayın. DB – jpprade

İlgili konular