Skip to main content
1-Visitor
November 13, 2015
Solved

object query exception

  • November 13, 2015
  • 1 reply
  • 1734 views

Hi!

I want to query PromotionTarget objects by two parameters:

String str = obj.toString();

  HashMap<String, String> objSpec = getObjSpec(str);

  QuerySpec qs = new QuerySpec(PromotionTarget.class);

  qs.setAdvancedQueryEnabled (true);

  SearchCondition sc1 = new SearchCondition(PromotionTarget.class, "roleBObjectRef.key.classname", SearchCondition.EQUAL, objSpec.get("objClass"));

  qs.appendWhere(sc1, new int[]{0});

  qs.appendAnd();

  SearchCondition sc2 = new SearchCondition(PromotionTarget.class, "roleBObjectRef.key.id", SearchCondition.EQUAL, Long.getLong(objSpec.get("objId")));

  qs.appendWhere(sc2, new int[]{0});

  QueryResult qr =  PersistenceHelper.manager.find(qs);

  Persistable[] per = null;

  while (qr.hasMoreElements())

  {

  per = (Persistable[])qr.nextElement();

  list.add((PromotionTarget)per[0]);

  }

But I have an exception like this:

wt.pom.DatastoreException: Ошибка SQL при выполнении инструкции "SELECT 'wt.maturity.PromotionTarget',A0.createLCTemplateIsNull,A0.classnamekeyA6,A0.idA3A6,A0.createState,A0.description,A0.classnamekeyroleAObjectRef,A0.idA3A5,A0.classnamekeyroleBObjectRef,A0.idA3B5,CONVERT(varchar,A0.createStampA2,120),A0.markForDeleteA2,CONVERT(varchar,A0.modifyStampA2,120),A0.idA2A2,A0.updateCountA2,CONVERT(varchar,A0.updateStampA2,120) FROM PromotionTarget A0 WHERE ((A0.classnamekeyroleBObjectRef = ?) AND (A0.idA3B5 = )) AND (A0.markForDeleteA2 = 0); Bind Parameters=[wt.doc.WTDocument]". Сообщение системы базы данных:

2015-11-13 16:31:16,075 INFO  [ajp-bio-8010-exec-4] wt.system.out nadmin - Вложенное исключение: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ')'.

Best answer by AntonBagryanov

This code working fine:

try

  {

  String str = obj.toString();

  QuerySpec qs = new QuerySpec(PromotionTarget.class);

  qs.setAdvancedQueryEnabled (true);

  SearchCondition sc1 = new SearchCondition(PromotionTarget.class, "roleBObjectRef.key.classname", SearchCondition.EQUAL, getObjClass(str));

  qs.appendWhere(sc1, new int[]{0});

  qs.appendAnd();

  SearchCondition sc2 = new SearchCondition(PromotionTarget.class, "roleBObjectRef.key.id", SearchCondition.EQUAL, PersistenceHelper.getObjectIdentifier(obj).getId());

  qs.appendWhere(sc2, new int[]{0});

  QueryResult qr =  PersistenceHelper.manager.find(qs);

  PromotionTarget per = null;

  while (qr.hasMoreElements())

  {

  per = (PromotionTarget)qr.nextElement();

  list.add(per);

  }

  }

  catch (QueryException e) {e.printStackTrace();}

  catch (WTException e) {e.printStackTrace();}

1 reply

AntonBagryanov1-VisitorAuthorAnswer
1-Visitor
November 13, 2015

This code working fine:

try

  {

  String str = obj.toString();

  QuerySpec qs = new QuerySpec(PromotionTarget.class);

  qs.setAdvancedQueryEnabled (true);

  SearchCondition sc1 = new SearchCondition(PromotionTarget.class, "roleBObjectRef.key.classname", SearchCondition.EQUAL, getObjClass(str));

  qs.appendWhere(sc1, new int[]{0});

  qs.appendAnd();

  SearchCondition sc2 = new SearchCondition(PromotionTarget.class, "roleBObjectRef.key.id", SearchCondition.EQUAL, PersistenceHelper.getObjectIdentifier(obj).getId());

  qs.appendWhere(sc2, new int[]{0});

  QueryResult qr =  PersistenceHelper.manager.find(qs);

  PromotionTarget per = null;

  while (qr.hasMoreElements())

  {

  per = (PromotionTarget)qr.nextElement();

  list.add(per);

  }

  }

  catch (QueryException e) {e.printStackTrace();}

  catch (WTException e) {e.printStackTrace();}

16-Pearl
November 13, 2015

Hi Anton,

I guess your code was failing to get the value of long. I have seen instances where Long.getLong returns null and the logs indicates the same, there is only one parameter passed to the query. You can try Long.parseLong instead in your code to get it working.

Regards,

Bhushan

1-Visitor
November 13, 2015

Hi Bhushan!

Thank's for your reply! I'll check it later.