【问题标题】:How to work with JOOQ store() Method?如何使用 JOOQ store() 方法?
【发布时间】:2013-12-05 15:41:49
【问题描述】:

当我询问 JOOQ Here 的行为时。@Aaron Digulla 告诉我使用 store() 方法。但在我的情况下,我使用 Transaction 类执行所有删除、更新、获取操作。类似这样的事情

        Transaction transaction = Transaction.current();
        int status = transaction.insert(myRecord);

但我想根据记录进行插入或更新(如果是新的,则插入否则更新),我得到 store() 方法处理这个,但 store() 使用记录对象。

        myRecord.store();

当我这样做时,我得到了异常No Connection configured 没关系,因为这个对象没有附加任何事务。那么在我的情况下如何使用store() 方法。还有一个问题,它是否支持批处理updateinsertstore() 方法?

Transaction is our own class where we used 
TransactionFactory.getCurrentTransaction()
public static Transaction getCurrentTransaction() {
        return threadLocal.get();
    }

而myRecord是JOOQ生成的Record类的一个对象

【问题讨论】:

  • 你能告诉我们你是如何创建myRecord的吗?另外,Transaction 是什么?它不是 jOOQ API 的一部分
  • 用更多代码编辑问题?

标签: java sql jooq


【解决方案1】:

我建议您只关注examples from the manual,它解释了如何从Configuration / DSLContext 创建一个新的UpdatableRecord(在您的情况下,这可能对应于Transaction 是什么:

DSLContext create = DSL.using(...);

// Create a new record
BookRecord book1 = create.newRecord(BOOK);

// Insert the record: INSERT INTO BOOK (TITLE) VALUES ('1984');
book1.setTitle("1984");
book1.store();

// Update the record: UPDATE BOOK SET PUBLISHED_IN = 1984 WHERE ID = [id]
book1.setPublishedIn(1948);
book1.store();

注意对DSLContext.newRecord(Table)的调用。

批量存储

请考虑DSLContext.batchStore() 上的Javadoc。当然,您可能可以在这里与您的同事(我认为?)核对一下:How to convert list into UpdatableRecord?

【讨论】:

    【解决方案2】:

    五年后,如果你还用Java和jOOQ,可以试试3.11.2或最新的版本。

    jOOQ 在 3.10.6 ~ 3.11.1 版本有问题。您可以在Regression in UpdatableRecord.store() and update() methods when used with connection pools找到更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2019-07-14
      • 2016-09-25
      • 2021-04-03
      • 2017-10-30
      • 2021-10-14
      • 2020-12-06
      相关资源
      最近更新 更多