我必须指定jooq结果类型吗?

时间:2013-10-08 13:25:43

标签: java sql 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);

1 个答案:

答案 0 :(得分: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

或者使用这个技巧:

{{1}}