我有一个问题..为什么我重复了我在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())?
或者我不是这样做的吗?
我跟着答案是否有可能写一个数据类型转换器来处理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) 我正在评估JOOQ用于仍处于开发阶段的新系统.我希望避免在与应用程序一起开发数据库时生成代码,并且只是为此应用程序扮演持久存储的角色.因此,数据库模式定义应该由Java代码(java中的表定义)驱动.
JOOQ适合上述用例吗?是否有用于架构定义的java DSL?
我正在使用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中定义自定义数据的示例,该数据被传递到自定义生成器类中?
我使用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)
无论例外情况如何,都会提交事务中的更改吗?(我希望它)
我在简单的数据库中有两个类似的模式 - "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"模式类?
单元测试的问题是同一集合在流和 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) 我有我的实体与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存储库中声明的方法.我该如何处理?谢谢.
我有下表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中删除了对此的支持.有没有办法实现这个目标?
提前致谢.
当春季启动首次启动时,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) jooq ×10
java ×9
sql ×4
spring ×3
enums ×1
java-stream ×1
jpa ×1
mockito ×1
mysql ×1
postgresql ×1
spring-boot ×1
transactions ×1