常用jar使用杂记

dom4j

  1. dom4j的xpath表达式,除了//外都必须从根节点开始写。

hibernate

  1. bag不允许多个平行集合且更新性能低

  2. a different object with the same identifier value was already associated with the session错误
       session中有多个同类型对象,地址不一样,id一样,outer-join=“true” 可能会造成a different object with the same identifier value was already associated with the session错误

  3. 事务下 hibernate操作和sql操作 ,不能同时操作一个对象,否则会出现问题。

  4. 参数数组的顺序和addScalar顺序调用必须顺序一致

    sqlQuery.addScalar("aid", StandardBasicTypes.INTEGER);
    sqlQuery.addScalar("minPrice", StandardBasicTypes.DOUBLE);
    sqlQuery.addScalar("maxPrice", StandardBasicTypes.DOUBLE);
    
  5. Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
       线程1:

    Member member = MemberUtil.getMember(62392);
    
      ClubMember clubMember = ClubMemberUtil.saveMember(null, member);//保存memberId=62392的会员,id=2
      clubMemberService.saveOrUpdate(clubMember);//又对id=2的进行一次更新,但是id=2的已经被删除了所以会报错。
    

    线程2:

    String sql = "SELECT * FROM club_member c WHERE c.member_id = " + memberId;
      SQLQuery query = getSession().createSQLQuery(sql);
      query.addEntity(ClubMember.class);
      @SuppressWarnings("rawtypes")
      List list = query.list();//因为一些原因(eg.并发保存,没处理好get,set原子性)库里存在memberId=62392的会员,所以返回多个
      if(list.size() >= 1) {
          for (int i = 1; i < list.size(); i++) {//删除多余的会员,(id=1,id=2)
              ClubMember m = (ClubMember) list.get(i);
              System.out.println("clubmemer------------" + m.getId());
              delete(m);//删掉了id=2的,即新创建的
          }
           return (ClubMember) list.get(0)
       }
       return null;
    

    memberId应该是唯一的,如果用唯一索引做限制,则不会有上面问题

  6. 懒加载的实现要依赖主键,所以只有从表中的外键可以实现懒加载

  7. Hibernate继承映射:有重复插入问题

  8. java.lang.NoSuchMethodError:An internal error occurred during: “Fetching children of Database”.org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
           存在多个slf4j包或没有slf4j包,因而没有找到对应方法,解决方案:删除低版本包或添加slf4j包

mapstruct

  1. org.mapstruct.Mapping 设置批量转换是不起做用的
    @Mapper
    public interface ExportTaskConverter {
        //mapping不起作用
        @Mapping(target = "exportTimeStart", dateFormat =  "yyyy-MM-dd HH:mm:ss")
        @Mapping(target = "createTime", dateFormat = "yyyy-MM-dd  HH:mm:ss")
        public List<ExportTaskVo> entityToVo(List<ExportTaskEntity>  entity);
        public ExportTaskVo entityToVo(ExportTaskEntity entity);
    }
    
    改为如下
    @Mapper
    public interface ExportTaskConverter {
    
        //liist会默认调用下面的方法
        public List<ExportTaskVo> entityToVo(List<ExportTaskEntity>  entity);
    
        //起作用
        @Mapping(target = "exportTimeStart", dateFormat =  "yyyy-MM-dd HH:mm:ss")
        @Mapping(target = "createTime", dateFormat = "yyyy-MM-dd  HH:mm:ss")
        public ExportTaskVo entityToVo(ExportTaskEntity entity);
    }
    

Swagger

  1. @ApiModelProperty 说明(ver=1.5.2)
    • 必须得有相应的get方法才能在文档上显示
    • allowEmptyValue 不起作用
    • @ApiImplicitParams可以和对象方式一起使用
    • @ApiIgnore 可以用在方法参数上隐藏改参数

你可能感兴趣的:(java,jar,java)