[log]hibernate保存对象


@RestController
@Slf4j
public class JpaController {

    @Autowired
    DogRepository dogRepository;

    @Autowired
    UserRepository userRepository;

    @Autowired
    RoleRepository roleRepository;

    @Autowired
    PersonRepository personRepository;

    @Autowired
    BoneRepository boneRepository;

    ObjectMapper objectMapper = new ObjectMapper();
    ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter();


    @Autowired
    ManRepository manRepository;

    @PersistenceContext
    private EntityManager entityManager;

    @PersistenceContext
    private  Session session;


    /**
     * 单向一对多
     *
     * @create: 2019-04-01
     * @author: liu
     **/
    @RequestMapping("/findAllPhone")
    public void findAllPhone() throws JsonProcessingException {
        List<Man> all = manRepository.findAll();
        System.out.println(objectWriter.writeValueAsString(all));

        Session session = entityManager.unwrap(Session.class);
        System.out.println(session.isOpen());

        //保存对象 session.save();
        // session.flush();

        // Transaction transaction = session.beginTransaction();
        // 开启事务
        // transaction.commit();

        // 返回持久化对象
        // session.get()  返回null  直接命中数据库
        // session.load();  抛出异常  返回的是一个代理

        // session.delete();  将持久化对象变成瞬时  session 关闭之后就会变成一个普通的对象,被回收
        session.close();


        //    session 关闭之后进行修改就成为了托管对象 ,可以通过update 来重新持久化该对象

        // session.merge()  托管对象合并到持久化对象

        /**
         *  持久化上下文就是持久化对象的一个高速缓存
         *  持久化状态中的每个对象都为出久化上下文所知
         *  持久化上下文高速缓存从不自动收缩
         *  @create: 2019-04-03
         *  @author: liu
         **/

        // session.evict();  将一个高速缓存中的对象进行托管
        // session.clear(); 托管所有持久化实例
        // session.setReadOnly(); 禁止对特定实例的脏检查,只读的实例,将不会维持快照
        /**
         *  工作单元结束时,所有的修改都与数据库进行同步,这个过程称为持久化上下文的清除
         *  - 事务被提交时
         *  - 执行查询之前
         *  - 显式的调用flush
         *
         *  @create: 2019-04-03
         *  @author: liu
         **/

        // session.(); 来设置 同步行为的时机
        //    session.setFlushMode(FlushMode.ALWAYS);
        // session.setHibernateFlushMode();


        /**
         *  创建EntityManager时,分配了一个新的持久化上下文,
         *  可以在这个上下文中保存和加载对象
         *
         *  @create: 2019-04-03
         *  @author: liu
         **/

        // session.persist(); 立即持久化 与save 不同的是,不回返回该实例,清除时被级联

        // session.remove();  移除一个实例,变为瞬时状态
        //     托管 detached(分离) 对象持久化完毕之后,工作单元结束,不能保证该实例是否与数据库同步
        //    session 关闭时,持久化上下文终止
        //     NativeQuery nativeQuery = session.createNativeQuery("");
        // nativeQuery.setParameter("");

        /**
         *  注入的EntityManager 由容器维护
         *  持久化上下文由事务的范围决定,事务终止时,它也自动被清除和关闭
         *  @create: 2019-04-03
         *  @author: liu
        **/

    }
  }

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/java_sparrow/article/details/89004756
今日推荐