2016-03-03 39 views
1

我想在PostUpdateEvent中獲取對象的類型,有可能嗎? 也有可能有一個偵聽器的所有CRUD事件POST提交..像PostUpdateEventListener & PostDeleteEventListener一起杵嗎?如何爲不同類型的CRUD操作實現Hibernate Interceptor並獲取已修改的java對象的類名?

public class PostUpdateDoSomething implements PostUpdateEventListener 
{ 

    private static final long serialVersionUID = 1L; 


    @Override 
    public void onPostUpdate(PostUpdateEvent event) 
    { 


    // How Can I get the class name or Object type here? 
    /*This seems to be not working ---------*/ 

    Class<? extends Object> className = event.getEntity().getClass(); 
    System.out.println(className); 

    /*--------Not Working------------------*/ 


    } 


    @Override 
    public boolean requiresPostCommitHanding(EntityPersister event) 
    { 
     // TODO Auto-generated method stub 
     return false; 
    } 

} 
+0

http://www.mkyong.com/hibernate/hibernate-interceptor- example-audit-log /和https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/events.html – StanislavL

+0

@StanislavL這個例子不適合我的需求。 postFlush不會給我這種類型,例如UPDATE/DELETE/saveOrUpdate等。此外,類名問題仍然存在 –

回答

0

通常getClass應該工作。儘管實體是Hibernate代理或實體的子類,但有可能。

爲了測試是否是你可以做類似

if (object instanceof HibernateProxy) { 
    _clazz = (Class<T>) ((HibernateProxy) object).getHibernateLazyInitializer().getImplementation().getClass(); 
} else { 
    _clazz = (Class<T>) object.getClass(); 
} 

要測試的子類的代理,你需要final Class<?> parent = cls.getSuperclass();

相關問題