JPA/Hibernate Query Slow with too many queries

老子叫甜甜 提交于 2019-12-25 04:12:07

问题


I have two entities Employee and Department

The Employee entity is a read-only dataset for my application (I don't own this table)

The table data backing the Department Entity I do own. If I query my Employee entity without annotating a Department to Employee entity relationship, the query is superfast because it produces only one SQL call.

As soon as I annotate the Department relationship into the Employee entity, there are a ton of SQL calls. Here are what I think are the pertinent details for each entity to assist in getting help:

@Entity
Employee
@Id
String employee_number;
String first_name;
String last_name;
String phone_number;
@Column(name="dept")
private String home_dept_number;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="dept", referencedColumnName="dept_number", insertable = false, updatable = false)
@NotFound(action = NotFoundAction.IGNORE)
private Department department;


@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="dept", referencedColumnName="department_number", insertable = false, updatable = false)

@Entity    
Department
@Id
String dept_number
String dept_name;

@OneToOne(fetch = FetchType.LAZY)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name = "department_manager_id", referencedColumnName = "employee_number")
private Employee departmentManager;

@OneToOne(fetch = FetchType.LAZY)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name = "department_admin_aide_id", referencedColumnName = "employee_number")
private Employee departmentAdminAide;

@OneToOne(fetch = FetchType.LAZY)
@NotFound(action=NotFoundAction.IGNORE)
@JoinColumn(name = "department_rep_id", referencedColumnName = "employee_number")
private Employee departmentRepresentative;

回答1:


My guess is that the slowness is caused by the @NotFound annotations: Hibernate is probably forced to check if the department really exists.

Using @NotFound is a hack to compensate for an inconsistent database where employees reference departments which don't exist. If your database is consistent (and that should be enforced by foreign key constraints), you don't need those annotations.



来源:https://stackoverflow.com/questions/28546577/jpa-hibernate-query-slow-with-too-many-queries

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!