【问题标题】:how to update an object in Hibernate Criteria without knowing it's id如何在不知道其 ID 的情况下更新 Hibernate Criteria 中的对象
【发布时间】:2014-03-17 13:08:52
【问题描述】:

我想在 Criteria Hibernate 中翻译这个查询:

UPDATE Patient SET HourOut = ? WHERE IDQueue = ? AND TicketNumber = ? AND DATE_FORMAT(DATE(LastVisitDate), '%Y-%m-%d') = ?;

我了解当对象的 id 已知时更新对象的方法,但我不知道如何使用我这里的 where 类型进行更新。

【问题讨论】:

    标签: java hibernate criteria nhibernate-criteria


    【解决方案1】:

    您可以使用Example。

    Patient example = new Patient();
    example.setLastVisitDate(date);
    example.setIDQueue(idq);
    example.setTicketNumber(tnbr);
    
    matchesDate = session.createCriteria(Patient.class)
                     .add(Example.create(example)).list();
    for(Patient patient : matchesDate){
        Transaction t=session.beginTransaction();
        patient.setHourOut(outH);
        session.saveOrUpdate(patient);
        t.commit();
    }
    

    【讨论】:

    • 我会立即尝试,但与此同时,我只想知道在后台生成的 sql,这与我首先基于对象执行 SELECT 有何不同在 lastVisitDate/idQueue/ticketNumber 上,然后在返回的 Patient 上进行更新?
    • 我不明白。你的意思是静态sql-strings和动态生成sql的区别吗?
    • 我的意思是我也可以这样做: List lp = session.createCriteria(Patient.class) .add(Restrictions.eq("ticketNb", ticketNb) .add(Restrictions. eq("idQueue", idQ) ... 然后循环返回的列表并像我们处理示例一样处理它(setHourOut + update)。效率会低吗?
    • Example.create() 除了Restrictions.eq("ticketNb", ticketNb) .add(Restrictions.eq("idQueue", idQ) ... 之外什么都不做,但使用示例更容易阅读和理解。
    猜你喜欢
    • 2017-06-25
    • 2017-07-28
    • 2020-06-20
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多