我正在玩休眠,我已經下載了以下測驗資料庫https://dev.mysql.com/doc/employee/en/sakila-structure.html
我有一個關于員工類的命名查詢:
@NamedNativeQuery(
name="complexQuery",
query="select * from employees inner join salaries on employees.emp_no=salaries.emp_no where salaries.from_date < 19870101 "
"AND employees.emp_no = 10064;",
resultClass=Employee.class
)
我通過以下方式將員工映射到工資:
@OneToMany(
cascade = CascadeType.ALL,
fetch = FetchType.EAGER
)
@JoinColumn(name = "emp_no", nullable = false, insertable=false, updatable=false)
private Set<Salary> salaries = new HashSet<>();
我預計以下休眠查詢將包括 where 陳述句
工資.from_date < 19870101
但是我注意到實際上對薪水的休眠查詢選擇了該員工ID的所有行:
Hibernate:
select
*
from
employees
inner join
salaries
on employees.emp_no=salaries.emp_no
where
salaries.from_date < 19870101
AND employees.emp_no = 10064;
Hibernate:
select
salaries0_.emp_no as emp_no1_4_0_,
salaries0_.from_date as from_dat2_4_0_,
salaries0_.emp_no as emp_no1_4_1_,
salaries0_.from_date as from_dat2_4_1_,
salaries0_.salary as salary3_4_1_,
salaries0_.to_date as to_date4_4_1_
from
salaries salaries0_
where
salaries0_.emp_no=?
是否有自動生成的薪水查詢也包括
where
salaries0_.from_date < ?
AND salaries0_.emp_no=?
編輯:我也遇到了命名查詢的問題:
@NamedQuery(
name="complexQuery",
query="select e "
"from Employee e, Salary s "
"where e.id = 10064 "
"AND s.id.fromDate < 19900101"
"AND s.id.empNo = 10064"
)
uj5u.com熱心網友回復:
您沒有加入員工和薪資!
這是正確的說法
@NamedQuery(
name="complexQuery",
query="select e "
"from Employee e join e.salaries s "
"where e.id = 10064 "
"AND s.id.fromDate < 19900101"
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424547.html
上一篇:使用本機查詢公開端點而不創建物體
