我有一個RESTful API,它使用了一個用@EntityListners註解的實體類。而在EntityListner.java中,我有一個用@PostPersist註解的方法。所以,當這個事件觸發時,我想提取關於剛剛保存到數據庫的實體的所有信息。但是當我嘗試這樣做時,Glassfish正在生成一個異常,並且EntityListner類中的方法未按預期執行。下面是代碼如何使用JPA生命週期事件獲取實體數據
public class EntityListner {
private final static String QUEUE_NAME = "customer";
@PostUpdate
@PostPersist
public void notifyOther(Customer entity){
CustomerFacadeREST custFacade = new CustomerFacadeREST();
Integer customerId = entity.getCustomerId();
String custData = custFacade.find(customerId).toString();
String successMessage = "Entity added to server";
try{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
// channel.basicPublish("", QUEUE_NAME, null, successMessage .getBytes());
channel.basicPublish("", QUEUE_NAME, null, custData.getBytes());
channel.close();
connection.close();
}
catch(IOException ex){
}
finally{
}
}
}
如果我把註釋掉successMessage消息,而不是custData,一切工作正常。
http://www.objectdb.com/java/jpa/persistence/event關於實體生命週期方法說以下內容,我在想這是否是這裏的情況。
爲了避免觸發該實體生命週期事件(這是仍在進行中)回調方法不應調用EntityManager的或查詢方法,不應該訪問的任何其他實體對象
原始數據庫操作衝突有任何想法嗎?
你是什麼例外,你得到了什麼? –
包含異常和堆棧跟蹤。 – James