Hibernate 中 save() 和 persist() 的区别


Save() 和 persist() 这两种方法都用于将对象保存到数据库中。

根据文档 -

Save() - 持久化给定的瞬时实例,首先分配一个生成的标识符。(或者如果使用分配的生成器,则使用标识符属性的当前值。)如果关联映射了 cascade="save-update",则此操作会级联到关联的实例。

根据文档 -

persist() - 使瞬时实例持久化。如果关联映射了 cascade="persist",则此操作会级联到关联的实例。此方法的语义由 JSR-220 定义。

序号
关键
save()
persist()

1

基本

它将对象存储到数据库中

它也把对象存储到数据库中

2

返回类型

它返回生成的 ID,返回类型是可序列化的

它不返回任何内容。它的返回类型是 void。

3

事务边界

它可以在边界内和边界外保存对象

它只能在事务边界内保存对象

4.

分离的对象

它将为分离的对象在表中创建一个新行

它将为分离的对象抛出持久性异常

5.

受支持

它仅受 Hibernate 支持

它也受 JPA 支持

Hibernate 中 Save 的示例

@Entity
public class User {
   @Id
   Integer id;
   String name;
   public Integer getId() {
      return id;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import com.journaldev.hibernate.util.HibernateUtil;
public class SaveExample {
   public static void main(String[] args) {
      //get session factory to start transcation
      SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
      Session session = sessionFactory.openSession();
      Transaction tx = session.beginTransaction();
      User user = new User();
      user.setId(1)
      user.setName("ABCD")
      session.save(user);
      //Close resources
      tx.commit();
      sessionFactory.close();
   }
}

Hibernate 中 Persist 的示例

@Entity
public class User {
   @Id
   Integer id;
   String name;
   public Integer getId() {
      return id;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import com.journaldev.hibernate.util.HibernateUtil;
public class PersistExample {
   public static void main(String[] args) {
      //get session factory to start transcation
      SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
      Session session = sessionFactory.openSession();
      Transaction tx = session.beginTransaction();
      User user = new User();
      user.setId(1)
      user.setName("ABCD")
      session.persist(user);
      //Close resources
      tx.commit();
      sessionFactory.close();
   }
}

更新于: 2020年1月21日

19K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告