java - 为什么 @UniqueConstraint 无法从父类(super class)中找到列?

标签 java jpa unique-constraint

我有一个实现公共(public)属性的父类(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 表上找不到“org_id”列。但是,当我查看数据库时,该列确实存在于表中。

如果我将唯一约束注释更改为以下内容,那么它就可以工作:

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

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

最佳答案

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

因此您需要告诉 Hibernate 字段 orgId 的列必须是 org_id:

 @Column(name = "org_id")

关于java - 为什么 @UniqueConstraint 无法从父类(super class)中找到列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49037695/

相关文章:

java - setDaemon(false) 是多余的吗?

java - 为什么 OPTIMISTIC_FORCE_INCREMENT 不增加二级缓存中的版本

java - 我可以将什么作为第二个参数传递给 java 反射的 getMethod 以表示没有参数?

java - 读取证书错误

java - EntityManager 看不到其他事务中所做的更改

sql - 具有空值的复合唯一约束

MySQL在一个查询中删除多行,每行唯一的条件

django - 使用 Django 表单集保存具有唯一属性的多个对象

java - 当我使用spring data保存实体时,Repository返回空指针异常

java - Hibernate 和 MySQL 抛出 : check the manual that corresponds to your MySQL server version for the right syntax to use near 'Show'