我有这个实现公共属性的超类和一个继承它的子类:
@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抱怨" org_id"无法在SimpleClass表上找到列。但是,当我查看数据库时,该列确实存在于表中。
如果我将唯一约束注释更改为下面的那么它可以工作:
@Table(uniqueConstraints = @UniqueConstraints(columnNames = {"orgId", "name"}))
虽然我很高兴我找到了解决办法,但我正在努力理解原因。别人也看过这个吗?我是否确实必须引用继承属性的Java属性名称而不是它们的实际列名?
答案 0 :(得分:2)
名为“orgId”的字段的默认映射将映射到名为“orgId”的列,而不是“org_id”。
所以你需要告诉Hibernate字段orgId
的列必须是org_id
:
@Column(name = "org_id")