zoukankan      html  css  js  c++  java
  • 【Hibernate】HQL new map

    HQL 查询如果需要带出对象(比如:OneToOne子对象)的一两个属性,而不是全部带出。可以使用 select new map的方法带出。
    1.lazy还是设置为false

    1 /**关联属性对象*/
    2 @OneToOne(cascade=CascadeType.PERSIST, fetch=FetchType.LAZY)
    3 @JoinColumn(name="PROPERTY_ID", referencedColumnName="ID")
    4 private Property property;

    2.使用select new map(propertyId为要带出的子对象ID属性值)

    1 private static final String HQLPAGE = "from Plugin p where p.state=1 and p.name like :name";
    2 String hqlResult ="select new map(id as id,prictureUrl as prictureUrl,name as name,priceFormula as priceFormula,sort as sort,isShow as isShow,property.id as propertyId) " + HQLPAGE;

    注:
    如果带出的是一整个property对象的话,用jackson对对象进行转换的时候会报错。
    这时候要将带出的对象设置为fetch=FetchType.EAGER

    如果有多步增加操作,可在Service层添加@Transactional
    这样如果出错全部操作都会回滚

    3.想要先添加property对象,然后再把property对象放进plugin里面的话,有两种方法。

    1 /**关联属性对象*/
    2 @OneToOne(cascade=CascadeType.PERSIST, fetch=FetchType.LAZY)
    3 @JoinColumn(name="PROPERTY_ID", referencedColumnName="ID")
    4 private Property property;

    1.在CascadeType.PERSIST的情况下,设置为瞬时对象,必须将property对象先保存到数据库里面,在放进plugin里面。
    2.在CascadeType.ALL的情况下,可以直接新建对象,然后放进plugin里面。

  • 相关阅读:
    windows 10下ELK环境快速搭建实践
    Windows 10下搭建以太坊私有链环境
    线程状态转换图
    JAVA中IO技术:BIO、NIO、AIO
    MySQL MDL锁的阻塞问题 & online ddl的插队现象【转发】
    MySQL InnoDB MVCC 能否完全解决幻读?
    Linux 计算 存储 网络 统计命令
    MySQL B+ tree & B tree & Hash
    mmap学习总结
    Linux内存分配小结--malloc、brk、mmap【转】
  • 原文地址:https://www.cnblogs.com/zengweiming/p/3660533.html
Copyright © 2011-2022 走看看