繁体   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