2012-07-26 61 views
3

我有兩個項目:JPA(休眠)和設置實體監聽器上運行

  • beans.jar與JPA實體(註解爲JSON/XML序列化)和persistence.xml文件
  • rest.war與REST應用,其中是JPA EntityManagerFactory定製性能如hibernate.connection.*

我希望分發的被實例化ans.jar以獲得更好的客戶端編程便利。到目前爲止好。

某些實體在@PrePersist事件(實際上淹沒密碼散列)中有代碼,我不想分發它。我可以將該代碼推送到JPA實體監聽器,但在@EntityListeners批註中引用了監聽器類,因此它也必須位於beans.jar中。

是否有可能對設置JPA實體監聽器的一個(或全部)實體類在運行時,即在rest.war項目?

也許有一些休眠屬性爲此,我忽略了... 謝謝。

回答

0

這爲所有實體設置了通用的EntityListener。

創建一個名爲orm.xml的文件,並將其放在與persistence.xml文件(例如META-INF)相同的目錄中。我不確定這是否可以放入戰爭檔案中。 orm.xml文件的內容應該如下:

<?xml version="1.0" encoding="UTF-8"?> 
<entity-mappings version="2.0" xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd"> 
    <persistence-unit-metadata> 
     <persistence-unit-defaults> 
     <entity-listeners> 
      <entity-listener class="nathan.db.Listener"/> 
     </entity-listeners> 
     </persistence-unit-defaults> 
    </persistence-unit-metadata> 
</entity-mappings> 

然後創建一個名爲Listener的類。

package nathan.db; 

import javax.persistence.PrePersist; 

public class Listener 
{ 
    @PrePersist 
    public void event(Object entity) 
    { 
     // salt password 
    } 
}