标签: jooq

jooq-获取单个值

我有一个问题..为什么我重复了我在fetch方法中选择的内容.

Date minDate = getDSLContext()
    .select(CON_CAL_INSTANCE.DATE.min())
    .from(CON_CAL_INSTANCE)
    .join(CON_CAL_TEMPLATES)
    .on(CON_CAL_INSTANCE.TEMPLATE_ID.eq(CON_CAL_TEMPLATES.ID))
    .where(CON_CAL_TEMPLATES.ENTRY_TYPE.in("REPT", "HRPT"))
    .fetchOne(CON_CAL_INSTANCE.DATE.min());
Run Code Online (Sandbox Code Playgroud)

所以我CON_CAL_INSTANCE.DATE.min()在我的select子句中提供了为什么我必须重复它fetchOne(CON_CAL_INSTANCE.DATE.min())

或者我不是这样做的吗?

java sql jooq

9
推荐指数
1
解决办法
4896
查看次数

如何使用JOOQ在PostgreSQL中插入带有JSON列的可更新记录?

我跟着答案是否有可能写一个数据类型转换器来处理postgres JSON列? 实现nodeObject转换器.

然后我尝试使用可更新记录来插入记录,我得到了"org.jooq.exception.SQLDialectNotSupportedException:在方言POSTGRES中不支持类型类org.postgresql.util.PGobject"异常.

我怎么解决这个问题?

以下是我的代码:

TableRecord r = create.newRecord(TABLE);
ObjectNode node = JsonNodeFactory.instance.objectNode();
r.setValue(TABLE.JSON_FIELD, node, new JsonObjectConverter());
r.store();
Run Code Online (Sandbox Code Playgroud)

java sql postgresql jooq postgresql-9.3

9
推荐指数
1
解决办法
5295
查看次数

可以在没有代码生成的情况下使用JOOQ吗?

我正在评估JOOQ用于仍处于开发阶段的新系统.我希望避免在与应用程序一起开发数据库时生成代码,并且只是为此应用程序扮演持久存储的角色.因此,数据库模式定义应该由Java代码(java中的表定义)驱动.

JOOQ适合上述用例吗?是否有用于架构定义的java DSL?

java jooq

9
推荐指数
1
解决办法
4678
查看次数

JOOQ:如何向生成的记录类添加接口

我正在使用JOOQ 3.6.4和Java 8从模式生成一组JOOQ记录.

一些表是类似结构的参考数据,假设它们有ID,CODE和VALUE列(它们可能有其他列,但它们至少都有这些列).

在我的代码中,不是由JOOQ生成的,我有一个接口"ReferenceData",它定义了与JOOQ为这三列生成的代码匹配的访问器.我想告诉JOOQ为"implements ReferenceData"它生成的Record对象添加一个子句(JOOQ已生成的代码将自动实现接口).

我不是要求JOOQ自动找出接口,我很好地列出了每个表应该在XML配置中实现的接口.

问题1:有没有办法配置JOOQ来生成implements子句而无需编写自定义生成器类?

如果我必须编写一个自定义生成器类 - 我仍然希望定义什么表记录实现XML配置中的接口.

问题2:是否有一个在XML中定义自定义数据的示例,该数据被传递到自定义生成器类中?

java sql code-generation jooq

9
推荐指数
1
解决办法
911
查看次数

jOOQ和Spring事务管理

我使用jOOQ 3.8和Spring Boot 1.4.1.我看到jOOQ使用一种机制来保证事务处理.

如果我将一个注释为事务的方法定义为一个执行二插入,那么它们是否在同一个事务中执行,例如

@Transactional(propagation = Propagation.MANDATORY)
public doInsert(){
    DSL.using(configuration).insertInto(...);
    DSL.using(configuration).insertInto(...);
}
Run Code Online (Sandbox Code Playgroud)

如果发生异常,所有执行的插入回滚吗?它们会在一次交易中执行吗?

或者,我应该这样做:

public doInsert(){
  create.transaction(configuration -> {

    DSL.using(configuration).insertInto(...);
    DSL.using(configuration).insertInto(...);    
  });
}
Run Code Online (Sandbox Code Playgroud)

如果我使用注释和jOOQ事务如下所示会发生什么:

@Transactional(propagation = Propagation.MANDATORY)
public doInsert(){
  create.transaction(configuration -> {

    // Wrap configuration in a new DSLContext:
    DSL.using(configuration).insertInto(...);
    DSL.using(configuration).insertInto(...);    
  });
  throw new RuntimeException(":)");
}
Run Code Online (Sandbox Code Playgroud)

无论例外情况如何,都会提交事务中的更改吗?(我希望它)

java spring transactions jooq

9
推荐指数
1
解决办法
3186
查看次数

Jooq在生成的查询中动态更改db的架构

我在简单的数据库中有两个类似的模式 - "develop"和"stage".我已经使用Jooq为其中一个模式生成了Java类(例如"develop").当jooq向db生成查询时,它会隐式地将模式的名称添加到所有查询的别名中

select "develop"."image"."id", "develop"."image"."image_data" 
from "develop"."image" 
where "develop"."image"."id" = ?
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,是否有方法在生成的查询中更改jooq模式名称(对于"stage"作为示例)而不重新生成jooq的"stage"模式类?

java sql jooq

9
推荐指数
1
解决办法
2001
查看次数

单元测试:使用 for 循环处理集合,但不使用流处理

单元测试的问题是同一集合在流和 for 循环中的处理方式不同。两种情况下的集合都是空的(data.size() = 0),但在情况 1 中,该集合以某种方式进行了处理,换句话说,它将进入 for 循环。在情况 2 中,该集合只是被跳过(这是预期的,因为它是空的)。

测试使用 Mockito,并将Result<Record>用于 JOOQ。

测试是旧的并且没有变化,唯一的变化是从 for 循环到流。

情况1

private SearchResult iterateData(
      Result<Record> data, ...) {

      for (Record record : data) {
           doSomething(record);
    }
Run Code Online (Sandbox Code Playgroud)

案例2

private SearchResult iterateData(
      Result<Record> data, ...) {
      data.stream().forEach(record -> doSomething(record)); 
Run Code Online (Sandbox Code Playgroud)

案例 1 for 循环示例的屏幕截图

模拟结果对象

private DefaultSearchRequestModel rowSpecificValuesTestSetup(
      parameters...) {
    

    DefaultSearchRequestModel searchRequest = new DefaultSearchRequestModel(
        Arrays.asList(....),
        Collections.singletonList(
            new SearchFilter(
                "test",
                Collections.singletonList(...)));

    List<Column> columns =
        this.searchService.filterUserAllowedColumns(...);

    Condition searchCondition =
        this.searchRepositoryMock.getSearchConditions(...);

    List<TableJoinMapping> joinMappings = …
Run Code Online (Sandbox Code Playgroud)

java mockito jooq java-stream

9
推荐指数
1
解决办法
1377
查看次数

我怎样才能简单地添加一个Spring Data REST实体的链接

我有我的实体与Spring Data JPA,但为了生成关于它们的统计数据,我在Spring中使用jOOQ @Repository.

由于我的方法返回List实体或a Double,我如何将它们作为链接公开?假设我有一个User实体,我想获得以下JSON:

{
  "_embedded" : {
    "users" : [ ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/api/users"
    },
    "stats" : {
      "href" : "http://localhost:8080/api/users/stats"
    }
    "profile" : {
      "href" : "http://localhost:8080/api/profile/users"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 0,
    "totalPages" : 0,
    "number" : 0
  }
} 
Run Code Online (Sandbox Code Playgroud)

http:// localhost:8080/api/users/stats中,我想获得一个链接列表,其中包含我在jOOQ存储库中声明的方法.我该如何处理?谢谢.

spring entity-framework jpa jooq spring-data-rest

8
推荐指数
2
解决办法
1万
查看次数

使用JOOQ从表中生成枚举类

我有下表YNM:

 id  name
 1   YES
 2   NO 
 3   MAYBE
Run Code Online (Sandbox Code Playgroud)

并希望JOOQ生成以下java枚举:

public enum YNM {
   YES,NO,MAYBE;
}
Run Code Online (Sandbox Code Playgroud)

据我所知,由于过于复杂/反直觉,因此在JOOQ 3中删除了对此的支持.有没有办法实现这个目标?

提前致谢.

java mysql enums jooq

8
推荐指数
2
解决办法
1475
查看次数

刷新Spring Boot上下文的Jooq CastException

当春季启动首次启动时,jooq运行良好.但是如果我对代码进行更改并且在Spring引导上下文刷新之后,那么我就遇到了类转换异常的问题.问题是在同一个类上抛出异常.

我的启动conf是:

@Autowired
private DataSource dataSource;
public ExecuteListener exceptionTransformer() {
    return new DefaultExecuteListener() {
        private static final long serialVersionUID = 1L;
        @Override
        public void exception(ExecuteContext context) {
            SQLDialect dialect = context.configuration().dialect();
            SQLExceptionTranslator translator = (dialect != null)
                ? new SQLErrorCodeSQLExceptionTranslator(dialect.name())
                : new SQLStateSQLExceptionTranslator();
            context.exception(
                translator.translate("jOOQ", context.sql(), context.sqlException()));
        }
    };
}
@Primary
@Bean
public DefaultDSLContext dsl() {
    return new DefaultDSLContext(configuration());
}
public DataSourceConnectionProvider connectionProvider() {
    return new DataSourceConnectionProvider(new TransactionAwareDataSourceProxy(dataSource));
}
public DefaultConfiguration configuration() {
    DefaultConfiguration configuration = new DefaultConfiguration();
    configuration.set(connectionProvider());
    configuration.set(new …
Run Code Online (Sandbox Code Playgroud)

java spring jooq spring-boot

8
推荐指数
1
解决办法
348
查看次数