当 @Column 未用于所有成员时,JPA 注释的 POJO 未正确映射
JPA-annotated POJOs are not mapped correctly when @Column is not used for all members
我有一个自定义 POJO,我正在使用 JOOQ .fetchInto(TestClassDto.class)
在其上映射数据库记录。我的 POJO 中的大部分字段与数据库 table 的列完全相似。但是,有一些是不同的,因此,我添加了 java 持久性并使用 @Column
在我的 POJO 上显式映射这些列,如 here.
所述
不幸的是,如果我在一些特定字段上使用@Column,这将不起作用。仅映射带有 @Column
注释的字段,其余字段将被忽略并设置为 Null
,即使它们与 table 列名称相似且应隐式映射。
如果我遗漏了什么,你能给我提示吗?
示例 POJO:
@Getter
@Setter
public class TestClassDto {
@Column(name = "field_AB_XYZ") // explicit mapping is required, thus need @Column
private Long myfieldAB;
/* Here, mapping could be implicitly done without using @Column because
** database column name and POJO property is same but it stays empty if I
** ignore @Column */
@Column(name = "hello_world")
private Long helloWorld;
}
最后,如果我从 POJO 的属性中完全删除 @Column
,helloWorld
属性 会被(隐含地)填充,但 myfieldAb
仍然是 NULL
(因为映射未按预期找到)。
下面是示例查询:
dslContext.select()
.from(SOMETHING)
.where(SOMETHING.NAME.eq("Something"))
.fetchInto(TestClassDto.class)
从 jOOQ 3.15 开始,您要么必须注释
- 你所有的属性...
- none 你的属性...
... 带有 @Column
注释。有一个待处理的功能请求可以更紧密地模仿 JPA 并使 @Column
注释对于某些属性是可选的:https://github.com/jOOQ/jOOQ/issues/4586.
同时,您可以为您的专栏添加辅助 getters/setters,而不是使用那些 JPA 注释:
public void setFieldAbXyz(Long v) {
this.myfieldAB = v;
}
public Long getFieldAbXyz() {
return myfieldAB;
}
我有一个自定义 POJO,我正在使用 JOOQ .fetchInto(TestClassDto.class)
在其上映射数据库记录。我的 POJO 中的大部分字段与数据库 table 的列完全相似。但是,有一些是不同的,因此,我添加了 java 持久性并使用 @Column
在我的 POJO 上显式映射这些列,如 here.
不幸的是,如果我在一些特定字段上使用@Column,这将不起作用。仅映射带有 @Column
注释的字段,其余字段将被忽略并设置为 Null
,即使它们与 table 列名称相似且应隐式映射。
如果我遗漏了什么,你能给我提示吗?
示例 POJO:
@Getter
@Setter
public class TestClassDto {
@Column(name = "field_AB_XYZ") // explicit mapping is required, thus need @Column
private Long myfieldAB;
/* Here, mapping could be implicitly done without using @Column because
** database column name and POJO property is same but it stays empty if I
** ignore @Column */
@Column(name = "hello_world")
private Long helloWorld;
}
最后,如果我从 POJO 的属性中完全删除 @Column
,helloWorld
属性 会被(隐含地)填充,但 myfieldAb
仍然是 NULL
(因为映射未按预期找到)。
下面是示例查询:
dslContext.select()
.from(SOMETHING)
.where(SOMETHING.NAME.eq("Something"))
.fetchInto(TestClassDto.class)
从 jOOQ 3.15 开始,您要么必须注释
- 你所有的属性...
- none 你的属性...
... 带有 @Column
注释。有一个待处理的功能请求可以更紧密地模仿 JPA 并使 @Column
注释对于某些属性是可选的:https://github.com/jOOQ/jOOQ/issues/4586.
同时,您可以为您的专栏添加辅助 getters/setters,而不是使用那些 JPA 注释:
public void setFieldAbXyz(Long v) {
this.myfieldAB = v;
}
public Long getFieldAbXyz() {
return myfieldAB;
}