Hibernate AttributeOverride注释错误

时间:2017-08-14 07:44:26

标签: java hibernate jpa spring-data

我有以下实体:

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_idcreated_by_client_idlast_modified_by_idlast_modified_by_client_id,其中包含有关行修改和创建的所有数据。如何解决这个异常?

1 个答案:

答案 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;
相关问题