// Load the customer record from a POJO
CustomerRecord customer = ctx.newRecord(CUSTOMER, customerPojo);
customer.update();
// Expected behavior: null fields in customerPojo will set db values to null
// Actual behavior: null fields in customerPojo do not change values in db
drop table if exists customers;
create table customers
(
id serial not null primary key,
first_name text,
last_name text
);
java prettyprint-override">@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public class Customer {
private Integer id;
private String firstName;
private String lastName;
public static Customers TAB = Customers.CUSTOMERS;
static DSLContext ctx = PostgresSingleton.getMainCtx();
public Customer store(){
CustomersRecord rec = ctx.newRecord(TAB, this);
if(getId() == null) {
rec.store();
}
else {
rec.update();
}
rec.refresh();
return rec.into(Customer.class);
}
}
def "Customer test"() {
when: "save a new customer"
Customer cust = Customer.builder().firstName("Phil").lastName("H").build().store()
then: "ID populated"
def custId = cust.getId()
custId != null
when: "null out last name"
cust.toBuilder().lastName(null).build().store()
then: "last name actually set to null"
cust.getId() == custId
cust.getFirstName() == "Phil"
cust.getLastName() == null //fails, still is "H"
}
编辑2:
似乎.update()
调用实际上是在取消数据库中的字段!但是,.into()
调用并没有像预期的那样用空字段刷新POJO。我在.refresh()
之后验证了lastName的值
为null,但是into()
调用没有使该值为null。
嗯,这是一个PEBKAC错误--我没有将更新的结果存储回测试中的同一个对象中:
when: "null out last name"
cust.toBuilder().lastName(null).build().store() //not storing the result!
应该是:
when: "null out last name"
cust = cust.toBuilder().lastName(null).build().store()
容易错过。
我想使用POJO作为源来更新JOOQ记录中更改的字段<代码>记录。from(Object)几乎正确,但根据文档 结果记录的所有值的内部“更改”标志都将设置为true。 我只希望实际更改的字段(由对象决定。等于(对象,对象))更新其标志。 这有两个原因: 我不想触发插入
我正在将jOOQ结果映射到POJO。 我希望避免由于字段名和列名之间的输入错误/不匹配而导致结果的列没有被映射。 有没有办法配置jOOQ来验证POJO的每个字段是否设置正确?
问题内容: 我有以下结构,并且需要某些字段为空,所以我使用指针,主要是处理sql空值 所以当我执行以下操作时,我可以看到json结果中的值类型可以为null 但是当我尝试使用反射完成所有操作时 我从反射部分得到的是以下错误 我究竟做错了什么? 这是一个GoPlay http://play.golang.org/p/0xt45uHoUn 问题答案: Reflection.Value.Set仅接受作为
我已经看到,当我们使用或时,JOOQ可以自动返回POJO 但是有可能将复杂查询的结果转换成多个POJO吗? 我测试了方法,它工作得很好。但我没有支持对象。
问题内容: 我在一个对象上调用user.save(),在其中设置user.signup_date = null; 但是当我在mongodb中查看用户时,仍然设置了signup_date和first_name …如何有效地将此字段设置为空或null? 问题答案: 要从现有文档中删除这些属性,请将其设置为,而不是在保存文档之前: 确认仍可在Mongoose 5.9.7中使用。请注意,您仍要在架构中定义
在我的Oracle数据库中,我有存储为VARCHAR的数量值。从数据库中检索记录时,我希望将它们映射到一个POJO,其中金额值表示为double。不幸的是,我不能使用强制类型,因为在数据库中,所有内容都存储为VARCHAR,并且没有模式将列标识为包含金额值的列。 我正在查看jOOQ转换器,这似乎是我想要的。因此,我为此创建了一个jOOQ转换器: 然而,每当我想使用将数据库记录映射到我的POJO时,