理解spring Hibernate生成sql

问题描述 投票:0回答:1

示例 2:一对一关联,假设源和目标共享相同的主键值。

// On Employee class:

@Entity
public class Employee {
    @Id Integer id;

    @OneToOne @MapsId
    EmployeeInfo info;
    ...
}

// On EmployeeInfo class:

@Entity
public class EmployeeInfo {
    @Id Integer id;
    ...
}

从 JPA/Hibernate 文档中的这个示例中,它表明两个表中的相同 id 列将被连接。 但是当我尝试这个并执行 empRepository.findById("123") 生成的sql是

从 emp left 中选择 emp.id,在 emp.info_id = emp_info.id 上加入 emp_info

但是在我的数据库列名不是info_id,而是“id”。 如果我显式设置 @MapsId 我会收到以下错误。 创建名称为“entityManagerFactory”的 bean 时出错。实体中的关联被注释为“@MapsId”,但引用了具有显式列映射的属性“id”

hibernate jpa spring-data
1个回答
0
投票

因为您的数据库模式似乎具有不同的外键列名称 (

id
)。要解决此问题,您需要使用
EmployeeInfo
注释显式指定
@JoinColumn
实体的列名称。

尝试在

Employee
实体中进行以下更改。

    @OneToOne 
    @JoinColumn(name = "id") // specify mis-matched column name explicitly
    EmployeeInfo info;
© www.soinside.com 2019 - 2024. All rights reserved.