休眠 - 实体审计
问题描述:
我有一个实体,我想跟踪所有更改,因此我创建了新的实体进行审计。 下面是我的主要实体:休眠 - 实体审计
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "primary")
public class PrimaryEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "primary_id")
private Long id;
private String name;
@LazyCollection(LazyCollectionOption.FALSE)
@ElementCollection
@CollectionTable(
name = "primary_attachments",
joinColumns = @JoinColumn(name = "primary_id")
)
private List<String> attachments;
@CreatedDate
@Temporal(TemporalType.DATE)
private Date createDate;
@LastModifiedDate
@Temporal(TemporalType.DATE)
private Date lastModifiedDate;
}
而且下面是我对审计实体:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "primary_audit")
public class PrimaryEntityAudit {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "audit_id")
private Long id;
@NotNull
@Column(name = "primary_entity_id")
private Long primaryId;
private String name;
@LazyCollection(LazyCollectionOption.FALSE)
@ElementCollection
@CollectionTable(
name = "primary_attachments_audit",
joinColumns = @JoinColumn(name = "primary_entity_id")
)
private List<String> attachments = new ArrayList<>();
@CreatedDate
@Temporal(TemporalType.DATE)
private Date createDate;
public PrimaryEntityAudit(PrimaryEntity primaryEntity) {
this.primaryId = primaryEntity.getId();
this.attachments.addAll(primaryEntity.getAttachments());
this.createDate = new Date();
}
}
我创造新的PrimaryEntityAudit并保存此对象,然后更新主实体之前更新的主要实体。 操作成功并保存了对象PrimaryEntityAudit,但不保存PrimaryEntityAudit的附件。
我也尝试过在ProjectEntityAudit的构造函数中执行setAttachments,但后来我得到一个异常:HibernateExcpetion:找到对集合的共享引用。
我应该如何映射审计集合以保存PrimaryEntity附件的旧状态?