如何使用@ManyToMany审核@JoinTable

如何解决如何使用@ManyToMany审核@JoinTable

我正在使用H2数据库进行Spring-Boot项目。我有两个实体PortfolioReport,并且两者之间存在多对多关联。 我希望对这些实体进行审核,因此我遵循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应该在中间表中添加一些列,以保持PortfolioReport之间的关系,并且该表是在后台创建的,您无权访问程序中的表格。只有休眠才能使用该表维护实体之间的关系并进行联接操作。

解决方案:

在这里,您应该使Join表显式维护PortfolioReport之间的多对多关系,以便您的程序中可以有{{1} }}。请阅读以下文章以了解操作方法:The best way to map a many-to-many association with extra columns when using JPA and Hibernate

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?