为什么@UniqueConstraint 无法从 super class 中找到列?

Why can't @UniqueConstraint find column from super class?

我有一个实现公共属性的超类和一个从它继承的子类:

@MappedSuperClass
@NoArgsConstructor
@Getter
public abstract class BaseEntity extends Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    protected String id;

    @Setter
    protected String orgId;
}

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Table(uniqueConstraints = @UniqueConstraints(columnNames = {"org_id", "name"}))
public class SimpleEntity extends BaseEntity {

    @NotNull
    @Column(nullable=false)
    private String name;
}

这给了我一个运行时错误,JPA/Hibernate 抱怨无法在 SimpleClass table 上找到 "org_id" 列。但是,当我查看数据库时,该列确实存在于 table 中。

如果我将唯一约束注释更改为以下,则它会起作用:

@Table(uniqueConstraints = @UniqueConstraints(columnNames = {"orgId", "name"}))

虽然我很高兴找到了解决方法,但我正在尝试了解原因。其他人也看到了吗?我真的必须引用继承属性的 Java 属性 名称而不是它们的实际列名称吗?

名为 "orgId" 的字段的默认映射将映射到名为 "orgId" 的列,而不是 "org_id"。

所以你需要告诉 Hibernate 字段 orgId 的列必须是 org_id:

 @Column(name = "org_id")