- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
尝试使用 Joda DateTimes 生成 JooQ POJO,但遇到了一些问题。 POJO 使用默认的 java.sql.TimeStamp 值而不是 DateTimes 从生成器中出来。
下面的代码。
创建表——此处时间戳字段的名称已更改——想要确保我没有在我的构建系统中的某处访问缓存。此名称仍应与以下正则表达式一起使用以进行匹配。
CREATE TABLE nonsense (
name VARCHAR(50) NOT NULL,
DATETIME_TEST TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
id UUID NOT NULL,
PRIMARY KEY(id)
);
转换类 -- 基于 documentation.
public class LocalDateTimeConverter implements Converter<Timestamp, LocalDateTime> {
@Override
public LocalDateTime from(Timestamp databaseObject) {
return new LocalDateTime(databaseObject.getTime());
}
@Override
public Timestamp to(LocalDateTime dt) {
return new Timestamp(dt.toDateTime().getMillis());
}
@Override
public Class<Timestamp> fromType() {
return Timestamp.class;
}
@Override
public Class<LocalDateTime> toType() {
return LocalDateTime.class;
}
}
Jooq 配置 XML。基于文档(感谢捕获我的表达式/表达式错误 Luke)!
<configuration>
<generator>
<database>
<customTypes>
<customType>
<name>org.joda.time.LocalDateTime</name>
<converter>n.b.jooqJodaTime.LocalDateTimeConverter</converter>
</customType>
</customTypes>
<forcedtypes>
<forcedType>
<name>org.joda.time.LocalDateTime</name>
<expressions>.*DATETIME.*</expressions>
</forcedType>
</forcedtypes>
</database>
</generator>
</configuration>
创建的 POJO:
@javax.persistence.Column(name = "DATETIME_TEST", precision = 23, scale = 10)
public java.sql.Timestamp getDatetimeTest() {
return this.datetimeTest;
}
对于历史背景,这是最初的问题。
Create Table:
CREATE TABLE nonsense (
name VARCHAR(50) NOT NULL,
TEST_DATETIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
id UUID NOT NULL,
PRIMARY KEY(id)
);Converter:
package n.b.jooqJodaTime;
import org.joda.time.DateTime;
import org.jooq.Converter;
import java.sql.Timestamp;
public class DateTimeConverter implements Converter<Timestamp, DateTime> {
@Override
public DateTime from(Timestamp databaseObject) {
return new DateTime(databaseObject.getTime());
}
@Override
public Timestamp to(DateTime dt) {
return new Timestamp(dt.getMillis());
}
@Override
public Class<Timestamp> fromType() {
return Timestamp.class;
}
@Override
public Class<DateTime> toType() {
return DateTime.class;
}
}Jooq Configuration:
<configuration>
<jdbc>
<url>jdbc:h2:file:build/database</url>
<driver>org.h2.Driver</driver>
<user>sa</user>
</jdbc>
<generator>
<database>
<name>org.jooq.util.h2.H2Database</name>
<inputSchema>PUBLIC</inputSchema>
<includes>.*</includes>
<customTypes>
<customType>
<name>org.joda.time.DateTime</name>
<converter>n.b.jooqJodaTime.DateTimeConverter</converter>
</customType>
</customTypes>
<forcedtypes>
<forcedType>
<name>org.joda.time.DateTime</name>
<expression>.*DATETIME.*</expression>
</forcedType>
</forcedtypes>
</database>
<generate>
<pojos>true</pojos>
<immutablePojos>true</immutablePojos>
<jpaAnnotations>true</jpaAnnotations>
<validationAnnotations>true</validationAnnotations>
<deprecated>false</deprecated>
</generate>
<target>
<packageName>n.b.c.generated.jooq</packageName>
<directory>src/main/java/</directory>
</target>
</generator>
</configuration>And here are the results:
/**
* The column <code>PUBLIC.NONSENSE.TEST_DATETIME</code>.
*/
public final org.jooq.TableField<n.b.c.generated.jooq.tables.records.NonsenseRecord,java.sql.Timestamp> TEST_DATETIME = createField("TEST_DATETIME", org.jooq.impl.SQLDataType.TIMESTAMP, this);
I'd like this to look like this:
/**
* The column <code>PUBLIC.NONSENSE.TEST_DATETIME</code>.
*/
public final org.jooq.TableField<n.b.c.generated.jooq.tables.records.NonsenseRecord,org.joda.time.DateTime> TEST_DATETIME = createField("TEST_DATETIME", org.jooq.impl.SQLDataType.TIMESTAMP, this);
最佳答案
这可能是因为您的 XML 中有拼写错误。 (出于历史原因)该元素应称为 <expressions/>
不是 <expression/>
:
<complexType name="ForcedType">
<all>
<!-- The name of the type to be forced upon various artefacts -->
<element name="name" type="string" minOccurs="1" maxOccurs="1" />
<!--
A Java regular expression matching columns, parameters, attributes,
etc to be forced to have this type
-->
<element name="expressions" type="string" minOccurs="1" maxOccurs="1" />
</all>
</complexType>
See also the XSD for details .我认为在 jOOQ 3.3 中为两个元素名称创建同义词是值得的。现在注册为 #2837
<forcedtypes/>
还有一个错字元素,应该是<forcedTypes/>
!
关于java - Jooq CustomTypes 生成默认类型 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19896772/
我正在尝试创建一个在运行时设置的自定义类型列表。这怎么可能? 这是我的代码: Type customType = typeof(string); // or someOtherVariable.Get
我正在尝试使用 Enumerable.ToList()在 PowerShell 中。显然,要做到这一点,我必须明确地将对象转换为 IEnumerable ,但我无法做到这一点。看来我不能正确写IEnu
我需要返回按时间顺序排列的警报列表。下面的方法 1 执行此操作。 我还需要获取某种警报类型的警报,如果 AlertTypeID = {1,2,3,6,8,9,x},则按 CreateDate 返回这些
我有一个返回列表的 WCF 服务。 [DataContract] public class EmployeesVM { [DataMember] public int ID { get
我有一个包含自定义类型的 IList。该自定义类型的属性之一称为 ID。我如何在不使用 for 循环的情况下转换它?该数组不应为 CustomType,但如果是 ID 类型,则为 int。 谢谢! 最
我正在使用一个名为 LanguageExt 的库.这个库提供了一些工具来处理 C# 代码中的函数式编程。我还使用 FluentNHibernate 将我的域类映射到我的数据库。 当属性可为空时,我想使
尝试使用 Joda DateTimes 生成 JooQ POJO,但遇到了一些问题。 POJO 使用默认的 java.sql.TimeStamp 值而不是 DateTimes 从生成器中出来。 下面的
我是 C# 新手。我有一个 Persons 类和一个继承自 Persons 类的 User 类。在我的控制台中,我在一个数组中输入了一个用户。然后我可以通过仅输入用户 ID 向用户数组中的用户添加注释
我有一个 WCF 服务,它将一些自定义对象返回到桌面客户端应用程序。这两个项目共享相同的 ObjectLibrary.dll,但是当 WCF 服务器返回这些对象时,它正在返回 ClientApplic
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎偏离主题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或 include a mini
我是 angularJs2 的新手。我创建了以下服务: import { Injectable, OnInit } from '@angular/core'; import { customType
给定以下枚举... object MyEnum extends Enumeration { type MyEnum = Value val Val1 = Value("val1") val
我正在尝试调用一个异步函数并指定一个自定义类型(我们称之为“CustomType”)。我在该类型中指定了一些随机属性,只是为了理解它是来自数据库的东西(内容可能会根据检索到的项目而有所不同,对于存储在
我正在开发一个 WCF 应用程序,我的一项服务需要使用用 Java 开发的第 3 方 Web 服务。第 3 方服务由政府提供,几乎不可能访问其代码/要求更改。 我从它的 wsdl 中将它添加为服务引用
我是学Android开发的,看到很多话题都说LiveData不推荐用了。我的意思是它不是最新的,我们应该改用 Flows。 我正在尝试使用 Flows 从 ROOM 数据库获取数据,然后将它们转换为
我有实体 Super 的 SuperType 表单。 在这个表单中,我有一个 collection 字段为 ChildType 实体 Child 的表单类型 super 类型类: public fun
我正在尝试在客户端和服务之间共享一个大型字典/ map 。我需要能够双向设置值,并从字典/ map 中删除值,而无需每次都来回传递整个 map 。 我知道我可以使用以下方法创建 map : map c
我的数据网格: 以下列只显示标题: 我知道这可能是错误的,但现在我的问题是如何显示它? itemssource是IEnu
我需要以下方面的帮助 - 首先,这是我收到的错误: SEVERE: A message body writer for Java class java.util.ArrayList, and Java
我无法将 google-api-services-admin-directory Organization 转换为 JSONArray,因为会引发以下异常: Exception message : M
我是一名优秀的程序员,十分优秀!