首页 > 解决方案 > Hibernate ElementCollection/CollectionTable 使用现有字段作为审计实体中的 JoinColumn#referencedColumnName

问题描述

我们有以下数据结构:

@Audited(WithModifiedFlag = true)
@Entity
public class A {
  private int id;

  @Id
  @DocumentId
  @GeneratedValue( strategy = GenerationType.IDENTITY )
  public int getId() {
    return id;  
  }

  private UUID uuid;

  @Column( name = "uuid", columnDefinition = "BINARY(16)" )
  public UUID getUuid() {
    return uuid;
  }

  private String name;

  @Column( name = "name" )
  public String getName() {
    return name;
  }
  
  private Set<String> relatedA = new HashSet<>();

  @ElementCollection
  @CollectionTable( name = "a_to_a",
      joinColumns = @JoinColumn( name = "a_right", referencedColumnName = "uuid" ) )
  @Column( name = "a_left" )
  @NotAudited
  public Set<String> getRelatedA() {
    return relatedA;
  }
}

问题是,这为我们提供了对 的 modified_flag 列的MappingException声明。Duplicate property mappinguuid

我假设JoinColumn在这种情况下需要一个不存在的字段referencedColumnName并自动尝试创建所需的审计字段?

@NotAudited如果我们添加,整个事情都会起作用getUuid(),我不太明白为什么。

标签: javasqlspringhibernate

解决方案


推荐阅读