我有多年的 SQL 经验。我是 Hibernate 的新手,我已经了解了 Hibernate 的基础知识。 下面的逻辑是所需要的;不过,我更改了表名称以确保其不会泄露公司详细信息。 另请注意,SQL 必须作为一个 SQL 语句运行 - 其他应用程序可以在该语句运行的同时更新表。 表设计无法更改,因为其他应用程序已在生产环境中使用它们。
有人可以演示如何在 Hibernate 中进行以下更新吗? createNativeQuery 是一个选项吗?
update
PERSON P
set
P.STATUS = 'Happy'
where
P.PK_ID = :person_id
and
(
select count(1)
from WORK_JOBS WJ
where WJ.RESOLVED_STATUS is null
) = 0
and
(
select count(1)
from EXPENSES EX
where EX.COST > :max_exp_cost
) = 0
;
简化的表定义如下。
create table PERSON
(
PK_ID NUMBER NOT NULL,
LAST_NAME VARCHAR2(100),
FIRST_NAME VARCHAR2(100),
PRIMARY KEY PK_ID
)
;
create table WORK_JOBS
(
PK_ID NUMBER NOT NULL,
SUMMARY VARCHAR2(100),
DESCRIPTION VARCHAR2(1000),
RESOLVED_STATUS VARCHAR2(50),
PRIMARY KEY PK_ID
)
;
create table EXPENSES
(
PK_ID NUMBER NOT NULL,
SUMMARY VARCHAR2(100),
DESCRIPTION VARCHAR2(1000),
COST DECIMAL(10,2),
PRIMARY KEY PK_ID
)
;
最佳答案
您必须使用条件选择记录。
criteria=getCurrentSession().createCriteria(PERSON.class, "person");
DetachedCriteria dCriteria=DetachedCriteria.forClass(WORK_JOBS.class, "workjobs");
DetachedCriteria dCriteria=DetachedCriteria.forClass(EXPENSES.class, "workjobs");
criteria.add(Subqueries.Exists());
然后您必须为每个 Person 对象设置 P.STATUS = 'Happy' 并在数据库中更新它。
关于Java Hibernate - 使用子查询进行复杂的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18954920/