java - 如何使用 @ManyToMany 审核 @JoinTable
问题描述
我正在开发一个带有 H2 数据库的 Spring-Boot 项目。我有两个实体Portfolio
和Report
,两者之间存在多对多关联。我希望对这些实体进行审核,因此我按照本教程通过AuditorAware
带有自定义字段的界面进行审核。
这两个实体都经过了很好的审计,列是在数据库中创建的。但是,连接表portfolio_reports
不会被审计。我怎样才能审计连接表呢?
投资组合.java
@Entity
@Table(name = "portfolio")
public class Portfolio extends Auditable<String> implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
@Unique
private String name;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
@JoinTable(name = "portfolio_report", joinColumns = @JoinColumn(name = "portfolio_id"), inverseJoinColumns = @JoinColumn(name = "report_id"))
private List<Report> reports;
// Getters and setters
}
报告.java
@Entity
@Table(name = "report")
public class Report extends Auditable<String> implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "axioma_id")
private Long axiomaId;
@Column(name = "name")
private String name;
@AuditJoinTable
@ManyToMany(mappedBy = "reports", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
private List<Portfolio> portfolios;
// Getters and setters
}
可审计的.java
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable<U> {
@Version
@Column(name = "version_no")
protected Long versionNo;
@CreatedDate
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_date")
protected Date createdDate;
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "modified_date")
protected Date modifiedDate;
}
AuditorAwareImpl.java
public class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
return Optional.of("Admin");
}
}
持久性配置.java
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
public class PersistenceConfiguration {
@Bean
public AuditorAware<String> auditorAware() {
return new AuditorAwareImpl();
}
}
解决方案
问题:
显然,这里Auditable
应该在中间表中添加一些列,以维护和之间的关系Portfolio
,Report
并且该表是在后台创建的,并且您无权在程序中访问该表。只有 hibernate 可以使用该表来维护实体之间的关系并进行连接操作。
解决方案:
Portfolio
在这里,您应该制作保持和明确之间的多对多关系的 Join 表,Report
以便您可以PortfolioReport
在程序中拥有可以从Auditable
. 请阅读以下帖子以了解如何做到这一点:使用 JPA 和 Hibernate 时将多对多关联与额外列映射的最佳方法
推荐阅读
- mongodb - MongoDB Mongoose - 鉴别器性能
- python-3.x - 用于计算介于 ! 之间的字符的 Python 程序 和 2 ##
- c++ - 具有泛型类的模板
- git - 我应该什么时候使用 git add,在对文件进行更改之前或之后?
- logging - 在 Docker 应用程序中使用 Logback 更改动态日志级别
- javascript - 如何在 javascript 中处理两个 API 调用?
- html - 如何使页脚适合所有屏幕
- twitter - Twitter 应用程序显示代码:89 无效或过期的令牌
- python-3.x - Cupy 索引很慢
- vue.js - 通过 slug 获取页面和页面数据。Strapi 和 Nuxt