[英]How do I use a JPARepository inside of a PrePersist Annotation?
我有一個事務性警報表和一個主警報類型表。 每當將警報添加到表時,我都希望發送電子郵件,因此我認為我將使用PrePersist。 但是,在我的電子郵件中,我想包含警報類型表中包含的一些信息。
我試圖在Alert類中添加對AlertTypeRepository的引用,但是我不能這樣做,因為我的警報類是@ Table,alertTypeRepository不是列。
以下是我的警報課程
@Entity
@Table
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Alert {
@Id
@GeneratedValue
int id;
@Column
String name;
@Column
String alertTypeId;
@Column
String detailedMessage;
@Column
String status;
@Temporal(TemporalType.TIMESTAMP)
Date time;
}
下面是我的AlertType類
@Entity
@Table
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class AlertType {
@Id
@GeneratedValue
int id;
@Column
String name;
@Column
String header;
@Column
String footer;
@Column
String summary;
@Column
String deliveryType;
@Column
Boolean active ;
@Column
String recipients;
}
我想在Alert類中擁有一個PrePersist函數。 這使我可以從AlertType類訪問其相應的頁眉和頁腳。
我想出了一個解決方案,因此希望這對遇到類似問題的任何人有所幫助。 基本上,我必須為Alert類創建一個EntityListener,然后添加以下類。
@Component
public class AlertListener {
static AlertTypeRepository alertTypeRepository;
@Autowired
public void init(AlertTypeRepository alertTypeRepository)
{
this.alertTypeRepository = alertTypeRepository;
}
@PrePersist
public void prePersist(Alert alert) {
List<AlertType> alertType= this.alertTypeRepository.findAll();
}
}
據我所知,存檔目的有兩種方法。 您的alterType不是由Spring管理的。
EntityListener
並將其應用於您的實體類,這似乎並不使您感興趣。 @Configurable
注釋對您的實體進行注釋: @Configurable(preConstruction = true)
class AlterType{
@Inject YourRepository bean as normal.
}
使它工作。 首先,您必須在項目依賴項中添加與aspectj
相關的jar。 其次,您可以選擇加載時編織或編譯時編織來為您的類處理注入。
在Maven中有一個AspectJ編譯器配置示例可用於編譯時編織(請注意,僅用於AspectJ編譯器Maven插件配置,我在這里未使用@Configurable。)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.