【问题标题】:How does Hibernate query on a column with @ManyToOne relationship?Hibernate 如何查询具有@ManyToOne 关系的列?
【发布时间】:2021-11-14 00:46:06
【问题描述】:

我想知道,当我们查询作为外键的列时,hibernate 如何在内部查询表。更多理解请看代码

员工表

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
  @Id
  private String userId;
  
  private String name;
    
  @ManyToOne(fetch = FetchType.EAGER, optional = false)
  @JoinTable(
    name = "employee_department",
    joinColumns = @JoinColumn(name = "employee_id"),
    inverseJoinColumns = @JoinColumn(name = "department_code")
  
  private Department department;
    
}

部门表


@Data
@Entity
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Department{
  
  @Id
  @Column(name = "code", unique = true)
  private String code;

  @Column(name = "name", nullable = false)
  private String name;

}

因此,一旦部署了应用程序,我们将拥有三个表,即employeedepartmentemployee_department。现在,如果我像这样写休眠 findByDepartmentCodeIn(Department Code),hibernate 将如何在内部解析这个查询?我想在department_code 列上创建一个索引,以使前一个查询更快,那么我应该在department 表中还是在生成的合并employee_department 表中创建索引?

【问题讨论】:

  • 从您的实体模型中,员工将属于一个部门,我试图了解您为什么需要连接表?难道你不能只在员工表中有部门 ID 列吗?当员工可以属于多个部门时,您可能需要连接表。

标签: java mysql spring hibernate spring-data-jpa


【解决方案1】:

将此添加到您的application.properties

spring.jpa.show-sql=true

它将显示您所做的所有查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多