如何在不指定任何值的情况下插入记录,只返回新创建的ID?如果我这样做:
private Long createOffer() {
return this.ctx.insertInto(StoreOffer.STORE_OFFER, StoreOffer.Store_OFFER.ID)
.returning(StoreOffer.STORE_OFFER.ID)
.fetchOne().getValue(StoreOffer.STORE_OFFER.ID);
}
我得到java.lang.NullPointerException
。如果我只是设置它null
, Not-Null-Constraint 就会被触发..
private Long createOffer() {
return this.ctx.insertInto(StoreOffer.STORE_OFFER, StoreOffer.Store_OFFER.ID)
.values((Long)null)
.returning(StoreOffer.STORE_OFFER.ID)
.fetchOne().getValue(StoreOffer.STORE_OFFER.ID);
}
我也试过这个:
private Long createOffer() {
StoreOfferRecord storeOfferRecord = this.ctx.newRecord(StoreOffer.STORE_OFFER);
storeOfferRecord.store();
return storeOfferRecord.getId();
}
但ID始终为null
。
表store_offer
目前看起来像这样:
CREATE TABLE store_offer (
-- PRIMARY KEY
id BIGSERIAL PRIMARY KEY
);
答案 0 :(得分:0)
INSERT INTO .. DEFAULT VALUES
jOOQ支持针对此用例的DEFAULT VALUES
语句的SQL标准INSERT
子句:
return this.ctx.insertInto(StoreOffer.STORE_OFFER)
.defaultValues()
.returning(StoreOffer.STORE_OFFER.ID)
.fetchOne().getValue(StoreOffer.STORE_OFFER.ID);
NullPointerException
您可以编写以下查询because of an API flaw (#3771)。以下不应该编译:
return this.ctx.insertInto(StoreOffer.STORE_OFFER, StoreOffer.Store_OFFER.ID)
.returning(StoreOffer.STORE_OFFER.ID)
.fetchOne().getValue(StoreOffer.STORE_OFFER.ID);
record.store()
不起作用: jOOQ记录有一个内部每列更改标志。没有记录级别的更改标志,表明整个记录需要发送到数据库,即使没有任何更改。具体而言,如果需要发布UPDATE
语句,这没有任何意义。
答案 1 :(得分:-2)
您可以尝试使用(Long)null
代替 <input type="radio" name="signup" value="Seed Program" checked />