Spring Boot 未审核@ManyToOne关系

5ktev3wc  于 2023-02-04  发布在  Spring
关注(0)|答案(1)|浏览(130)

我有两个实体:

@Entity
@Table(name = "entity_a")
@Audited
public class EntityA {

    @Column(name = "entity_a_uuid", columnDefinition = "char", updatable = false)
    @Type(type = "uuid-char")
    private UUID uuid = UUID.randomUUID();

    /**
     * @deprecated in favor of uuid
     */
    @Deprecated
    @Id
    @GeneratedValue
    @Column(name = "entity_a_id")
    private Integer id;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "entity_a_id", nullable = false)
    @BatchSize(size = 100)
    @NotAudited
    private List<EntityB> entityBs = new ArrayList<>();
}

以及

@Entity
@Audited
@Table(name = "entity_b")
public class EntityB {

    @Id
    @Column(name = "entity_b_uuid", columnDefinition = "char", updatable = false)
    @Type(type = "uuid-char")
    private UUID uuid = UUID.randomUUID();

    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name = "entity_a_id", nullable = false, insertable = false, updatable = false)
    private EntityA entityA;
}

每一个都被正确地审计到两个表entity_a_auditentity_b_audit中。但是,entity_b_audit中的entity_a_id字段 * 始终 * 为空。
一些细节:
1.如果EntityA中没有@NotAudited,我将得到一个错误消息,大意是:表EntityA_EntityB_audit不存在,看起来它试图将它们作为一个表来审计,这是我不希望看到的。
1.我试过将@Audited(targetAuditMode = elationTargetAuditMode.NOT_AUDITED)应用于每一面。如果只应用于EntityA,我会得到上面的错误。如果只应用于EntityB,什么都不会改变。如果同时应用于两个面,我会得到上面的错误。如果都不应用,我会得到上面的错误。
1.我怀疑entity_b_audit中的entity_a_id为空,因为在EntityA命中DB之前不会生成id。entity_a_identity_a表中自动递增。
1.使用hibernate-envers-5.4.32.Final.jar
最后,我希望entity_a_identity_b_audit中不为空,或者,如果我能以某种方式捕获entity_a_uuid,也就足够了。
任何帮助将不胜感激!谢谢。

gijlo24d

gijlo24d1#

您将该列标记为insertable = false, updatable = false,因此这里没有什么要审计的,因为Hibernate永远不能更改该列的值。

相关问题