簡體   English   中英

如何在PrePersist批注內使用JPARepository?

[英]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管理的。

  1. 定義一個JPA EntityListener並將其應用於您的實體類,這似乎並不使您感興趣。
  2. 第二種方法,使用Spring @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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM