我有以下实体:
public class MyEntity extends AuditableEntity {
@Column
private String name;
}
AuditableEntity
上课:
public class AuditableEntity {
@Id
@GenericGenerator(name = "uuid-gen", strategy = "uuid2")
@GeneratedValue(generator = "uuid-gen", strategy = GenerationType.IDENTITY)
private String id;
@CreatedBy
@JsonIgnore
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "user", column = @Column(name = "created_by_id")),
@AttributeOverride(name = "clientId", column = @Column(name = "created_by_client_id"))
})
private AuditorDetails createdBy;
@LastModifiedBy
@JsonIgnore
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "user", column = @Column(name = "last_modified_by_id")),
@AttributeOverride(name = "clientId", column = @Column(name = "last_modified_by_client_id"))
})
private AuditorDetails lastModifiedBy;
}
我的AuditorDetails
课程:
@Embeddable
public class AuditorDetails {
@Column(name = "auditor_client_id")
private String clientId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn
private User user;
}
另外,我有AuditorAware
返回AuditorDetails
个对象。当我尝试运行它时,我有以下异常:
org.hibernate.MappingException:实体映射中的重复列: com.aaa.MyEntity列:user_id(应使用insert =" false" 更新="假&#34)
但我不能使这个列不可更新且不可插入。主要目标是拥有MyEntity
4列 - created_by_id
,created_by_client_id
,last_modified_by_id
,last_modified_by_client_id
,其中包含有关行修改和创建的所有数据。如何解决这个异常?
答案 0 :(得分:0)
我已修复此问题,只需添加注释AssociationOverrides
:
@CreatedBy
@JsonIgnore
@Embedded
@AssociationOverrides({
@AssociationOverride(name = "user", joinColumns = @JoinColumn(name = "created_by_id"))
})
@AttributeOverrides({
@AttributeOverride(name = "user", column = @Column(name = "created_by_id")),
@AttributeOverride(name = "clientId", column = @Column(name = "created_by_client_id"))
})
private AuditorDetails createdBy;
@LastModifiedBy
@JsonIgnore
@Embedded
@AssociationOverrides({
@AssociationOverride(name = "user", joinColumns = @JoinColumn(name = "last_modified_by_id"))
})
@AttributeOverrides({
@AttributeOverride(name = "user", column = @Column(name = "last_modified_by_id")),
@AttributeOverride(name = "clientId", column = @Column(name = "last_modified_by_client_id"))
})
private AuditorDetails lastModifiedBy;