[Log] hibernate save the object


@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
        **/

    }
  }

Here Insert Picture Description

Here Insert Picture Description

Here Insert Picture Description

Here Insert Picture Description

Here Insert Picture Description

Here Insert Picture DescriptionHere Insert Picture DescriptionHere Insert Picture Description

Guess you like

Origin blog.csdn.net/java_sparrow/article/details/89004756