@Test
public void testPersistence(){
EntityManagerFactory factory;
EntityManager manager;
EntityTransaction transaction;
factory = Persistence.createEntityManagerFactory("JPA");
manager = factory.createEntityManager();
transaction = manager.getTransaction();
transaction.begin();
Customer customer = new Customer();
customer.setAge(15);
customer.setName("张三");
manager.persist(customer);
transaction.commit();
manager.close();
factory.close();
}
SQL:
Hibernate:
insert
into
CUSTOMERS
(Age, Email, Name)
values
(?, ?, ?)
persist方法类似于Hibernate save方法,但是存在一个不同点:
在数据库主键自增情况下:若提前设置id属性值,JPA EntityManager 的 persist方法将抛出异常,而Hibernate Session的 save 方法可以执行,将忽略提前设置的id值
@Table(name = "CUSTOMERS")
@Entity
public class Customer {
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO)
@Id
private Integer id;
@Column(name = "Name")
private String name;
@Column(name = "Email")
private String email;
@Column(name = "Age")
private int age;
}
persist:
@Test
public void testPersistence(){
EntityManagerFactory factory;
EntityManager manager;
EntityTransaction transaction;
factory = Persistence.createEntityManagerFactory("JPA");
manager = factory.createEntityManager();
transaction = manager.getTransaction();
transaction.begin();
Customer customer = new Customer();
customer.setId(3);
customer.setAge(15);
customer.setName("张三");
manager.persist(customer);
transaction.commit();
manager.close();
factory.close();
}
- 抛出org.hibernate.PersistentObjectException
hibernate save:
@Test
public void test(){
//1.创建一个SessionFactory对象
SessionFactory factory = null;
//1) 创建Configuration对象
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(cfg.getProperties()).build();
factory = cfg.buildSessionFactory(serviceRegistry);
//2.创建一个Session对象
Session session = factory.openSession();
//3.开启事务
Transaction transaction = session.beginTransaction();
//4.执行保存操作
User user = new User("张三", "杭州", new Date());
user.setId(10);
System.out.println(user);
session.save(user);
System.out.println(user);
//5.提交事务
transaction.commit();
//6.关闭Session
session.close();
}
User [id=10, name=张三, address=杭州, createOn=Fri Jan 29 11:33:15 CST 2016]
Hibernate:
insert
into
users
(name, Address, createOn, description)
values
(?, ?, ?, ?)
User [id=8, name=张三, address=杭州, createOn=Fri Jan 29 11:33:15 CST 2016]
- 虽然提前设置了,但是将被忽略