在休眠中使用已弃用的保存方法的替代方法

dna*_*iel 6 java hibernate

我使用以下代码将人员对象保存到数据库中:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Main {

    public static void main(String[] args) {
        Person person = new Person();
        person.setID(1);
        person.setName("name-1");
        person.setAddress("address-1");

        Configuration configuration = new Configuration().configure().addAnnotatedClass(Person.class);
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.save(person);
        transaction.commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现save方法已被弃用。我们应该使用什么替代方法?

tho*_*est 8

save()自 Hibernate 6.0 起已弃用。javadoc建议改用persist()

已弃用。

使用持久化(对象)

小字:save()persist()相似,但仍然不同。save()立即持久化该实体并返回生成的 ID。persist()只是标记要插入的实体。ID(取决于标识符生成器)可以异步生成,例如在刷新会话时。

  • 这是一个非常不完整的答案。你*不能*简单地用“persist()”替换所有出现的“save()”,因为这两种方法具有完全不同的语义。虽然 `save()` 确保生成的密钥在调用后存在于对象中,但 `persist()` 却不能。它们也有不同的级联行为,谁知道还有什么不同。仅仅替换方法调用很可能会破坏任何足够复杂的应用程序。因此,每次更换都需要仔细调查后果和进一步的伴随变化。 (3认同)