[英]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.