2010-03-02 9 views
6

हाई लोग,एक जेपीए पर्यावरण में हाइबरनेट घटना श्रोताओं को घोषित करना

मैं जावा ईई 5 पर्यावरण में विकसित एक परियोजना पर काम कर रहा हूं। मैं जानना चाहता हूं कि मैं हाइबरनेट ईवेंट श्रोता कैसे घोषित कर सकता हूं ताकि सीआरयूडी ऑपरेशन किए जाने पर मुझे सूचित किया जा सके।

मैं पढ़ा है कि मैं इस तरह *cfg.xml कुछ हाइबरनेट विन्यास फाइल में घोषित करना चाहिए:

<hibernate-configuration> 
    <session-factory> 
     ... 
     <event type="load"> 
      <listener class="com.eg.MyLoadListener"/> 
      <listener class="org.hibernate.event.def.DefaultLoadEventListener"/> 
     </event> 
    </session-factory> 
</hibernate-configuration> 

समस्या मैं इस परियोजना में इस तरह के एक फ़ाइल नहीं है है। हम जेपीए का उपयोग कर रहे हैं (अंतर्निहित कार्यान्वयन के रूप में हाइबरनेट के साथ)। क्या आपको पता है कि मुझे उस विशिष्ट फ़ाइल को बनाने की ज़रूरत है? यदि हाँ, मुझे इसे कहां रखना चाहिए?

अग्रिम धन्यवाद।

+1

हाय, क्या आपको जवाब मिल गया है? – Scarlett

उत्तर

4

ध्यान दें कि आप इसे कॉलबैक विधियों पर एनोटेशन के साथ भी निर्दिष्ट कर सकते हैं। या तो उन्हें इकाई में, या एक अलग वर्ग में एम्बेड करें, जिसे एक इकाई श्रोता कहा जाता है।

@Entity 
@EntityListeners(class=Audit.class) 
public class Cat { 

    @Id private Integer id; 
    private String name; 

    @PostLoad 
    public void calculateAge() { 
     ... 
    } 
} 

public class LastUpdateListener { 

    @PreUpdate 
    @PrePersist 
    public void setLastUpdate(Cat o) { 
     ... 
    } 
} 

मैं तुम्हें भी निर्दिष्ट कर सकते हैं कि XML config में लगता है: यहाँ एक टुकड़ा documentation से लिया है। लेकिन मेरी राय में एनोटेशन अधिक सुविधाजनक है।

+0

धन्यवाद, लेकिन मुझे लगता है कि ये जेपीए इकाई श्रोताओं हैं। मैंने इन लोगों के साथ प्रयास किया और मुझे कुछ मुद्दों का सामना करना पड़ रहा है। मैं सीधे हाइबरनेट घटना श्रोताओं के साथ प्रयास करना चाहता हूं। – user284400

5

मुझे लगता है कि आप एनोटेशन का उपयोग कर रहे हैं? यदि हां, तो आपको लगता है कि ऐसा करने के लिए, तो जैसे @EntityListeners एनोटेशन का उपयोग कर सकते हैं:

@MappedSuperclass 
@EntityListeners(AbstractEntityListener.class) 
public abstract class AbstractEntity { 
    ... 
} 

आपका इकाई श्रोता वर्ग ऐसा दिखाई दे सकता:

public class AbstractEntityListener { 

    /** 
    * Set creation and lastUpdated date of the entity. 
    * 
    * @param entity {@link AbstractEntity} 
    */ 
    @PrePersist 
    @PreUpdate 
    public void setDate(final AbstractEntity entity) { 
     final Date now = new Date(); 
     entity.setModified(now); 
    } 

} 

अलग एनोटेशन अलग घटनाओं को पकड़ने के लिए उपलब्ध की तरह, कर रहे हैं @PrePersist, @PreUpdate, @PostLoad, आदि

+0

नहीं, सवाल वास्तव में जेपीए का उपयोग करते समय हाइबरनेट विशिष्ट कॉन्फ़िगरेशन कहां रखना है। – ewernli

+1

@ewernli: "मैं जानना चाहता हूं कि मैं हाइबरनेट ईवेंट श्रोता कैसे घोषित कर सकता हूं ताकि सीआरयूडी ऑपरेशन किए जाने पर मुझे सूचित किया जा सके।" मेरा जवाब किसी भी बोझिल हाइबरनेट स्टंट के बिना समस्या हल करता है, मुझे लगता है। – Henning

+0

मैंने अपना पुराना उत्तर हटा दिया है ताकि आप ओपी से जवाब देख सकें। किसी कारण से वह इकाई श्रोता का उपयोग नहीं करना चाहता। मैं आपको अन्यथा राय साझा करता हूं। – ewernli

2

ऐसा लगता है आपके विशिष्ट सामान्य hibnerate.cfg.xml एक संपत्ति hibernate.ejb.cfgfile के रूप में कर सकते हैं। एक hibernate.xfg.xml फ़ाइल के भीतर:

तुम भी हमेशा की तरह सभी अपने हाइबरनेट विन्यास हाइबरनेट तरह से परिभाषित कर सकते हैं। आपको इस कॉन्फ़िगरेशन फ़ाइल का उपयोग hibernate.ejb.cfgfile प्रॉपर्टी के माध्यम से जेपीए कार्यान्वयन को बताना होगा।

this पोस्ट या this एक देखें।

<persistence> 
<persistence-unit name="manager1" transaction-type="JTA"> 
    <jta-data-source>java:/DefaultDS</jta-data-source> 
    <properties> 
     <property name="hibernate.ejb.cfgfile" value="/hibernate.cfg.xml"/> 
    </properties> 
</persistence-unit> 
</persistence> 

ध्यान दें कि मैंने कभी भी इसका व्यक्तिगत रूप से उपयोग नहीं किया है।

6

अपने persistence.xml में:

<persistence> 
    <persistence-unit name="myPersistenceUnit"> 
     ... 
     <snip/> 
     ... 
     <properties> 
      <property name="hibernate.ejb.event.load" value="com.eg.MyLoadListener,org.hibernate.event.def.DefaultLoadEventListener"/>  
     </properties> 
    </persistence-unit> 
</persistence> 

पर Hibernate EntityManager docs नज़र में लागू होने वाले सभी संपत्तियों के लिए "तालिका 2.1 इकाई प्रबंधक विशिष्ट गुण हाइबरनेट।"।

संबंधित मुद्दे