2013-10-08 3 views
1

Есть ли способ не указывать все аргументы типа в приведенном ниже примере? Я пробовал использовать только «Запись», но безрезультатно.Должен ли я указывать тип результата jooq?

Map<Integer,Result<Record6<Integer, String, Integer, String, String, Integer>>> records = db() 
      .select(TRANSITIONS.TRANSITION_ID, TRANSITIONS.TYPE, POSES.POSE_ID, POSES.NAME, IMAGES.URL, IMAGES.SCORE.max()) 
      .from(TRANSITIONS 
      .join(POSES).on(POSES.POSE_ID.equal(TRANSITIONS.TO_POSE_ID)) 
      .join(IMAGES).on(IMAGES.POSE_ID.equal(POSES.POSE_ID))) 
      .where(TRANSITIONS.FROM_POSE_ID.equal(fromPoseId)) 
      .groupBy(TRANSITIONS.TRANSITION_ID, TRANSITIONS.TYPE, POSES.POSE_ID, POSES.NAME, IMAGES.URL) 
      .fetchGroups(TRANSITIONS.TRANSITION_ID); 

ответ

0

Путь Java дженериков работы, вы не можете получить

Map<Integer, Result<?>> // or 
Map<Integer, Result<Record>> 

От метода fetchGroups(), учитывая его подпись:

<K> Map<K, Result<R>> fetchGroups(Field<K> key) 

Вы можете обойти эту проблему, однако, настраивая тип <R> вашего ResultQuery, либо небезопасным литьем, либо делая весь выбор менее типичным как таковой:

db().select(new Field[] { 
    TRANSITIONS.TRANSITION_ID, 
    TRANSITIONS.TYPE, 
    POSES.POSE_ID, 
    POSES.NAME, 
    IMAGES.URL, 
    IMAGES.SCORE.max() 
}).from(...) 

Или используя этот трюк:

db().select(...) // "Typesafe" select clause 
    .select() // Additional select clause removing typesafety 
Смежные вопросы