2013-10-08 65 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) 

可以解決這個問題,但是,調整你的ResultQuery<R>類型,或者通過不安全的鑄造,或者讓整個選擇更少的類型安全如此:

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 
相關問題