当前位置: 首页 > 知识库问答 >
问题:

JOOQ字段类仅绑定到记录(无类型)

陶烨赫
2023-03-14

我正在尝试创建一个通用类型安全方法来逐行获取一些字段,如下所示:

/**
 * Abstract Generic DAO Layer for BaseEntity
 *
 * RB - Record Bean
 * EB - Entity Bean
 * PK - Primary key type
*/
public interface AbstractDao<RB extends TableRecord, EB extends BaseEntity, PK> {

    /**
     * Fetches specified fields by given primary key
     */
    Optional<EB> findById(PK id, TableField<RB, ?>... fields);

}

虽然它工作正常,但问题是我不能在这里提供字段类型作为第二个泛型参数:

TableField<RB, ?>... fields

因为它只知道字段本身,所以可能会导致堆污染问题。

我很乐意将我的签名改为:

Optional<EB> findById(PK id, Field<RB>... fields);

但是Field只接受其类型作为泛型参数,而不是记录类型。

在JOOQ代码库中,字段类是否有绑定到其记录类型的子/父类?

谢谢

共有1个答案

裴育
2023-03-14

在JOOQ代码库中,字段类是否有绑定到其记录类型的子/父类?

<代码>表格字段

不管怎样,只要压制警告:

@SuppressWarnings("unchecked")
Optional<EB> findById(PK id, TableField<RB, ?>... fields);

毕竟,使用varargs时的这些堆污染警告真的很烦人,而且与其说是API的缺陷,不如说是语言的缺陷。

 类似资料:
  • 我目前正在评估,因为我相信我开始重新发明轮子,它看起来非常接近:) 现在,在挖掘伟大的留档时,我发现我的用例介于使用JOOQ作为SQL生成器和使用JOOQ作为SQL生成器之间。我想: 创建普通SQL字符串,如使用JOOQ作为SQLBuilder部分所示 而不是使用硬编码的构造,我更喜欢存储表的名称以及它的列名和类型,如使用JOOQ作为SQLBuilder与Code生成部分所示> 我不喜欢使用代码生

  • 我想使用POJO作为源来更新JOOQ记录中更改的字段<代码>记录。from(Object)几乎正确,但根据文档 结果记录的所有值的内部“更改”标志都将设置为true。 我只希望实际更改的字段(由对象决定。等于(对象,对象))更新其标志。 这有两个原因: 我不想触发插入

  • 类似于这个问题:如何在Jooq中初始化和创建ResultSet和记录?但使用自定义行类型记录而不是简单的表记录。我正在实例化一个jooq记录以用于模拟,但该记录有超过22列并包含来自许多连接表的行,所以我使用RecordImpl。 这引发异常 java.lang.IllegalArgumentException:行()中不包含字段(“course\u id”) 注意,我没有直接使用RecordIm

  • 我有一个带有REST方法的控制器类,可以抛出各种异常。我已经决定在一个单独的类中处理这些异常,在我的处理程序方法中使用@ControlllerAdwn和@ExceptionHandler。但是,我有一个问题,我的REST方法使用另一个库的注释。此库捕获REST方法引发的异常。现在,我正在全局处理异常,而不是直接通过REST方法中的试/捕获,我的异常总是被其他库捕获,而不是被我自己的处理程序方法捕获

  • 我在JOOQ中有一个查询,其中包含一个带有另一个表的左OUTER JOIN。这是有意的,因为不能保证相应的记录会存在,在这种情况下,我仍然希望从以前的表中检索值,并为缺失的字段提供默认值。 但是,由于带有默认参数的函数已被弃用,我如何检查字段是否包含空值? 使用字符串很容易,但布尔值只返回为,这意味着我无法检查它是否真的设置为false,或者它正是JOOQ决定返回的。 我试过: 但是这不起作用,因

  • 问题内容: 我正在使用Java 8的JOOQ 3.6.4从架构中生成一组JOOQ记录。 有些表是结构相似的参考数据,假设它们具有ID,CODE和VALUE列(它们可能具有其他列,但至少都具有这些列)。 在我的代码中(不是由JOOQ生成的),我有一个接口“ ReferenceData”,该接口定义了与JOOQ为这三列生成的代码匹配的访问器。我想告诉JOOQ向它生成的Record对象添加一个子句(JO