Beispiel #1
0
  @Test
  public void evict() {
    // 从session缓存中把指定的持久化对象移除
    News news1 = (News) session.get(News.class, 1004);
    News news2 = (News) session.get(News.class, 1004);

    news1.setAuthor("aa");
    news2.setAuthor("bb");
    session.evict(news1);
  }
Beispiel #2
0
  @Test
  public void testFlush() {
    News news = (News) session.get(News.class, 1001);
    System.out.println(news);
    // 是在session的生命周期中,开了一个事务,Session可以感知到
    news.setAuthor("hecheng");
    session.flush();
    /**
     * flush使数据表中的记录和session缓存中的对象的状态保存一致 为了保持一致则可能会发送对应的sql语句 1.调用Transaction的commit()方法中:
     * 在该方法中先进行flush()方法,然后在提交事务 2.flush()方法方法可能会发送sql语句,但不会提交事务 3.显示flush()方法
     */

    // session.get(News.class, 1001);
    News news1 = (News) session.createCriteria(News.class).uniqueResult();
    System.out.println(news1);
  }
Beispiel #3
0
  /** 1.若更新一个持久化对象,不需要显示调用update()方法,因为在 调用Transaction的commit()方法时,会先执行session的flush方法 */
  @Test
  public void testUpdate() {
    News news = (News) session.get(News.class, 1005);
    //		transaction.commit();
    //		session.close();
    //		session=sessionFactory.openSession();
    //		transaction=session.beginTransaction();
    //
    // 可以把一个游离对象变为持久化对象
    news.setAuthor("zhangsan");
    // session.update(news);

    /**
     * 1.即使该对象没有变化,调用该方法都会发送update()语句 2.和触发器协同工作时可能会发生问题 3.解决方案?
     * 如何能让update()方法不再盲目触发update()语句,得在更新之前 查询数据库 在hbm.xml文件中设置select-before-update="true"即可
     * 只有在跟触发器协工作时才设置该属性 4.如果对一个数据表不存的对象,调用update()方法会抛出异常 5.
     */
  }
Beispiel #4
0
  @Test
  public void testSave() {
    // save()方法,把一个临时对象变为持久化对象,同时保存在数据库中
    News news = new News();
    news.setAuthor("sic");
    news.setDate(new java.sql.Date(new java.util.Date().getTime()));
    news.setTitle("Oracle11");
    System.out.println(news);
    // news.setId(1000);
    // session.save(news);

    news.setId(10000);
    session.persist(news);

    System.out.println(news);
    /**
     * 1.save:执行save()方法后为对象分配ID 2.在flush缓存时会计划执行一条insert语句 3.ID:在save()方法之前的ID是无效的
     * 4.在save()方法之后持久化对象的ID是不能被修改的
     */

    /** persist()方法之前,若对应已经有了id了,则不会执行insert,而会抛出异常 */
  }