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

JOOQ 3.14 InsertQuery中带有Postgresql的NoSuchMethod

羊舌赞
2023-03-14
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]
@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);

如果我用ctx.insertinto来做这个...很好用。我最初使用的是Jooq3.14.0,但升级到最新的3.14.4对此没有帮助。生成的Keys类一定有问题,因为在初始化Keys类之前一切都正常工作。是Postgresql表结构出了问题,还是代码生成出了问题?

完整回购如下:https://github.com/eriran/criminal-api/tree/security-tumpt

共有1个答案

佴德曜
2023-03-14

您说您使用的是Jooq3.14,但在堆栈跟踪中,有一个对版本3.13.4的引用:

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

您可能错误地设置了类路径。生成代码的jOOQ版本和运行代码的jOOQ版本必须相同。

 类似资料:
  • 问题内容: 有一种简单的方法可以将hibernate设置为对每个带有postgres的表使用不同的主键ID。我试图在数据源中使用postgres方言: 但这是行不通的。谢谢 问题答案: 简短的答案是没有,没有 简单的 方法可以做到这一点。但是,我找到了一种有效的解决方案。基本上,您需要实现自定义方言。这是一个实现(请在注释中注明实现的原始来源)。 上述实施应当存储为下你的Grails项目中。 接下

  • 问题内容: 我在PostgreSQL数据库中创建了一个函数,希望使用JPA 2.1的StoredProcedureQuery方法调用该函数。 这是我的PostgreSQL查询: 这只是一个简单的查询,可以计算特定日期的用户。这只是一个演示查询,用于测试StoredProcedureQueries的工作方式。实际上,当仅通过postgreSQL使用时,它就可以正常工作。 现在,让我们尝试使用JPA

  • 问题内容: 我使用Vlad Mihalcea的库来将SQL数组(在我的情况下为Postgresql)映射到JPA。然后,假设我有一个实体,例如。 适当的SQL是: 使用QueryDSL,我想获取包含所有给定标签的行。原始SQL可能是: (摘自:https : //www.postgresql.org/docs/9.1/static/functions- array.html ) 可以用QueryD

  • 问题内容: 在此查询中: 它返回10天或更短的间隔。 如何添加两个参数?例子: 我已经尝试过: 但这是行不通的。 问题答案:

  • 问题内容: 我正在尝试使用PostgreSQL 9.2中添加的功能将查询结果映射到JSON 。 我在找出将连接的行表示为嵌套对象(1:1关系)的最佳方式时遇到麻烦 这是我尝试过的内容(设置代码:表格,示例数据,后跟查询): 查询本身: 我发现如果使用,我可以将结果字段分离为一个子对象,但似乎仅限于一个级别。我不能插入更多的语句,因为我认为在这种情况下我需要。 为我提供了列名,因为在该表的结果中,我

  • 我在设置docker映像时遇到了一些问题,该映像最终将用于bitbucket管道,以便为我从事的一些API项目运行测试。 我们本地开发人员的设置非常简单,在机器上运行Java 8 Maven PostgreSQL 9.6。 要运行集成测试,必须运行数据库。maven构建的一部分在服务器上创建必要的数据库和表。 我试图在docker映像上复制它,这是我到目前为止所拥有的。 如果我通过first ru