Method method

 Method method = clzz.getMethod(EntityConvert.dynamicMethodName(idName, "get"));

  Object o = method.invoke(object);

  if(null != o){

  SolrQuery query = new SolrQuery();

  query.setQuery(idName + ":" + o.toString());

  query.setStart(0);

  query.setRows(1);

  QueryResponse response = server.query(query);

  SolrDocument document = response.getResults()。get(0);

  LOG.info("更新一个记录" + EntityConvert.solrDocument2Entity(document, clzz));

  System.out.println("更新一个记录" + EntityConvert.solrDocument2Entity(document, clzz));

  UpdateRequest updateRequest = new UpdateRequest();

  updateRequest.setAction(AbstractUpdateRequest.ACTION.COMMIT, false, false);

  updateRequest.add(solrDocument2SolrInputDocument(document, object));

  updateRequest.process(server);

  }

  } catch (NoSuchMethodException e) {

  LOG.error("Update bean error"  + object);

  e.printStackTrace();

  } catch (IllegalAccessException e) {

  LOG.error("Update bean error"  + object);

  e.printStackTrace();

  } catch (IllegalArgumentException e) {

  LOG.error("Update bean error"  + object);

  e.printStackTrace();

  } catch (Exception e) {

  LOG.error("Update bean error"  + object);

  e.printStackTrace();

  }

  }

  }

  所谓更新,无非是根据唯一标识查询出来,然后重新赋值。在solr中我们查询出来的结果为SolrDocument对象,而updateRequest.add()的对象为SolrInputDocument对象。所以我们需要编写这两个对象的转换

  /**

  * [测试通过]

  *

  * 更新数据时用到,给出要更新的对象,Id为必须给出的属性,然后加上要更新的属性

  * 如果对应的属性的值为空或者为0,这不需要更新

  *

  * @param sd 查询到得SolrDocument

  * @param object

  * @return SolrInputDocument

  */

  public static SolrInputDocument solrDocument2SolrInputDocument(SolrDocument sd, Object object) {

  if (object != null && sd != null) {

  SolrInputDocument sid = new SolrInputDocument();

  Collection<String> fieldNameCollection = sd.getFieldNames();            // 得到所有的属性名

  Class<?> cls = object.getClass();

  Object o = null;

  for (String fieldName : fieldNameCollection) {

  try {

  //需要说明的是返回的结果集中的FieldNames()比类属性多

  Field[] filedArrays = cls.getDeclaredFields();                        //获取类中所有属性

  for (Field f : filedArrays) {

  //如果实体属性名和查询返回集中的字段名一致,填充对应的set方法

  if(f.getName()。equals(fieldName)){

  // 如果对应的属性的值为空或者为0,这不需要更新

  o = cls.getMethod(EntityConvert.dynamicMethodName(fieldName, "get"))。invoke(object);

  Class<?> fieldType = cls.getDeclaredField(fieldName)。getType();

  if (fieldType.equals(Integer.TYPE)) {

  Integer fieldValue = Integer.class.cast(o);

  if (fieldValue != null && fieldValue.compareTo(0) != 0) {

  sid.addField(fieldName, fieldValue);

  }

  } else if (fieldType.equals(Float.TYPE)) {

  Float fieldValue = Float.class.cast(o);

  if (fieldValue != null && fieldValue.compareTo(0f) != 0) {

  sid.addField(fieldName, fieldValue);

  }

  } else if (fieldType.equals(Double.TYPE)) {

  Double fieldValue = Double.class.cast(o);

  if (fieldValue != null && fieldValue.compareTo(0d) != 0) {

  sid.addField(fieldName, fieldValue);

  }

  } else if (fieldType.equals(Short.TYPE)) {

  Short fieldValue = Short.class.cast(o);

  if (fieldValue != null && fieldValue.compareTo((short)0) != 0) {

  sid.addField(fieldName, fieldValue);

  }

  } else if (fieldType.equals(Long.TYPE)) {

  Long fieldValue = Long.class.cast(o);

  if (fieldValue != null && fieldValue.compareTo((long)0) != 0) {

  sid.addField(fieldName, fieldValue);

  }

  } else if(fieldType.equals(List.class)){

  List fieldValue = List.class.cast(o);

  if(fieldValue != null){

  sid.addField(fieldName, fieldValue);

  }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值