[英]CDI Injecting services into JPA managed Entities
我確信這與這個問題密切相關,但是關於這個問題的操作有一個我不確定甚至對DI有意義的情況。 所以這就是我理解的,嘗試將JPA實體與CDI Bean混合通常不是一個好主意,因為兩者通常都是通過創建代理對象來完成的。 這就是我所設想的,但從我所看到的,這是不可能的。
@Entity
public class MyUniqueObject implements Serializable {
@Inject
private transient Logger log;
@Inject
private transient Event<MyUniqueObjectEvent> events;
@Id
private long id;
@NotNull
private String text;
public void setText( final String text ) {
log.debug( "updating text {}", this );
this.text = text;
events.fire( new MyUniqueObjectEvent( this ) ); // consumed by an @Observes method
}
}
做我想要完成的事情的最佳方法是什么? 這基本上就像從JPA持久化實體中觸發的事件,訪問日志對象。 代碼示例很有用。
我想知道觀察實體屬性的每個更改是否真的有用,即使它們最終不會被持久化。 所以難道你不認為實體監聽器和回調對你來說不夠嗎?他們支持CDI,因為JPA 2.1並提供了大量的回調你可以觀察到
所以你會得到
@EntityListeners(class=Audit.class)
@Entity
public class MyUniqueObject implements Serializable {}
public class Audit {
@Inject
private Logger log;
@Inject
private Event<MyUniqueObjectEvent> events;
}
現在,您可以觀察實體的生命周期 - 您最好將模型與審計分開,您不必陷入設置器和getter(這令人困惑)以實現日志記錄。 另請注意,您還可以為您擁有的每個實體定義默認實體偵聽器 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.