如何解决如何使用@ManyToMany审核@JoinTable
我正在使用H2数据库进行Spring-Boot项目。我有两个实体Portfolio
和Report
,并且两者之间存在多对多关联。
我希望对这些实体进行审核,因此我遵循this tutorial通过带有自定义字段的AuditorAware
界面进行审核。
这两个实体都经过了良好的审核,在数据库中创建了列。但是,未审核联接表portfolio_reports
。我如何也可以审计联接表?
Portfolio.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
}
Report.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
}
Auditable.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");
}
}
PersistenceConfiguration.java
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
public class PersistenceConfiguration {
@Bean
public AuditorAware<String> auditorAware() {
return new AuditorAwareImpl();
}
}
解决方法
问题:
很明显,Auditable
应该在中间表中添加一些列,以保持Portfolio
和Report
之间的关系,并且该表是在后台创建的,您无权访问程序中的表格。只有休眠才能使用该表维护实体之间的关系并进行联接操作。
解决方案:
在这里,您应该使Join表显式维护Portfolio
和Report
之间的多对多关系,以便您的程序中可以有{{1} }}。请阅读以下文章以了解操作方法:The best way to map a many-to-many association with extra columns when using JPA and Hibernate
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。