Java 使用Postgresql的JOOQ 3.14 InsertQuery中的NoSuchMethod

Java 使用Postgresql的JOOQ 3.14 InsertQuery中的NoSuchMethod,java,postgresql,spring-boot,jooq,Java,Postgresql,Spring Boot,Jooq,我试图使用Jooq的InsertQuery将记录插入PostgresQL数据库,但遇到以下错误: java.lang.NoSuchMethodError: 'org.jooq.UniqueKey org.jooq.impl.Internal.createUniqueKey(org.jooq.Table, org.jooq.Name, org.jooq.TableField[], boolean)' at fi.eriran.generated.jooq.Keys.<clinit>(K

我试图使用Jooq的InsertQuery将记录插入PostgresQL数据库,但遇到以下错误:

java.lang.NoSuchMethodError: 'org.jooq.UniqueKey org.jooq.impl.Internal.createUniqueKey(org.jooq.Table, org.jooq.Name, org.jooq.TableField[], boolean)'
at fi.eriran.generated.jooq.Keys.<clinit>(Keys.java:36) ~[classes/:na]
at fi.eriran.generated.jooq.tables.User.getPrimaryKey(User.java:124) ~[classes/:na]
at org.jooq.impl.UpdatableRecordImpl.getPrimaryKey(UpdatableRecordImpl.java:119) ~[jooq-3.13.4.jar:na]
at org.jooq.impl.AbstractRecord.set(AbstractRecord.java:349) ~[jooq-3.13.4.jar:na]
at org.jooq.impl.AbstractRecord.set(AbstractRecord.java:325) ~[jooq-3.13.4.jar:na]
at fi.eriran.generated.jooq.tables.records.UserRecord.setUsername(UserRecord.java:44) ~[classes/:na]
at fi.eriran.criminalapi.main.dao.user.query.UserQuery.createInsertRecord(UserQuery.java:37) ~[classes/:na]
at fi.eriran.criminalapi.main.dao.user.query.UserQuery.insert(UserQuery.java:22) ~[classes/:na]
如果我使用ctx.insertInto执行此操作。。。它很好用。我最初使用的是JOOQ3.14.0,但升级到最新的3.14.4并没有帮助。生成的Keys类肯定有问题,因为在Keys类初始化之前,一切都正常工作。Postgresql表结构是否有问题,或者代码生成是否有问题


此处完整回复:

您是说您正在使用jOOQ 3.14,但在堆栈跟踪上,有一个对版本3.13.4的参考:

在org.jooq.impl.updateableRecordImpl.getPrimaryKey(updateableRecordImpl.java:119)~[jooq-3.13.4.jar:na]


您可能未正确设置类路径。用于生成代码的jOOQ版本和用于运行代码的jOOQ版本必须相同。

您是说您正在使用jOOQ 3.14,但在堆栈跟踪上,有一个对版本3.13.4的引用:

在org.jooq.impl.updateableRecordImpl.getPrimaryKey(updateableRecordImpl.java:119)~[jooq-3.13.4.jar:na]


您可能未正确设置类路径。生成代码的jOOQ版本和运行代码的jOOQ版本必须相同。

感谢您指出这一点!这让我走上了正确的道路,我找到了罪魁祸首:父pom有一个spring boot starter父版本,版本为2.3.4.RELEASE,而JOOQ则依赖版本为3.13.4。我通过更新到最新版本解决了这个问题。@Erikr:这似乎是一个常见的问题。也许,这篇博文对这个问题的未来访问者很有用:谢谢你指出这一点!这让我走上了正确的道路,我找到了罪魁祸首:父pom有一个spring boot starter父版本,版本为2.3.4.RELEASE,而JOOQ则依赖版本为3.13.4。我通过更新到最新版本解决了这个问题。@Erikr:这似乎是一个常见的问题。也许,这篇博文对这个问题的未来访问者很有用:
@Component
public class UserQuery {

@Autowired
private DslContext ctx;

public InsertQuery<UserRecord> insert(NewUser newUser) {
    InsertQuery<UserRecord> insertQuery = ctx.insertQuery(USER);
    insertQuery.addRecord(createInsertRecord(newUser));
    insertQuery.setReturning();
    return insertQuery;
}

private UserRecord createInsertRecord(NewUser newUser) {
    UserRecord userRecord = new UserRecord();
    userRecord.setUsername(newUser.getUserName());
    userRecord.setPassword(newUser.getPassword());
    return userRecord;
}
}
CREATE TABLE criminal."user" (
id serial NOT NULL,
username varchar(500) NOT NULL,
"password" varchar(500) NOT NULL,
created_at timestamptz(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT user_pk PRIMARY KEY (id),
CONSTRAINT user_un UNIQUE (username)
);
CREATE INDEX user_username_idx ON criminal."user" (username);