12. JPA EntityManager persist 方法详解

来源:互联网 发布:淘宝女运动服套装冬款 编辑:程序博客网 时间:2024/05/21 15:46
@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")@Entitypublic 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]

虽然提前设置了,但是将被忽略

0 0