【问题标题】:How do I use a JPARepository inside of a PrePersist Annotation?如何在 PrePersist Annotation 中使用 JPARepository?
【发布时间】:2019-08-16 14:43:53
【问题描述】:

我有一个事务性警报表和一个主警报类型表。每当向表格添加警报时,我想发送一封电子邮件,所以我想我会使用 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 类访问其相应的页眉和页脚。

【问题讨论】:

    标签: java postgresql spring-boot jpa spring-data-jpa


    【解决方案1】:

    我想出了一个解决方案,所以我希望这可以帮助任何面临类似问题的人。基本上我必须为 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();
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      据我所知,归档目的有两种方法。您的 alterType 不是由 Spring 管理的。

      1. 定义一个 JPA EntityListener 并将其应用于您的实体类,您似乎对此并不感兴趣。
      2. 第二种方法,使用 Spring @Configurable 注释对您的实体进行注释:
      @Configurable(preConstruction = true) 
      class AlterType{
      
      @Inject YourRepository bean as normal.
      }
      

      让它发挥作用。首先,您必须将 aspectj 相关的 jar 添加到您的项目依赖项中。其次,您可以选择加载时编织或编译时编织来为您的类处理注入。

      Maven中有一个example of aspectj compiler config可用于编译时编织(注意,仅用于aspectj编译器maven插件配置,这里我没有使用@Configurable。)。

      【讨论】:

        猜你喜欢
        • 2011-07-13
        • 2018-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-07
        相关资源
        最近更新 更多