提问人:Eduardo B. 提问时间:10/27/2023 最后编辑:Mark RotteveelEduardo B. 更新时间:10/27/2023 访问量:35
使用 JOOQ 获取内部有对象的对象
Fetch an object that has a object inside using JOOQ
问:
我的数据库中有这个关联
用户(1) <----------->项目(n)
我正在尝试将数据提取到单个对象中
dsl.select()
.from(PROJECT.join(USERS)
.on(USERS.ID.eq(PROJECT.ID_USERS))).where(PROJECT.ID.eq(id))
.fetchOneInto(ProjectEntity.class)
这是用户
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UserEntity {
private int id;
private String username;
private String password;
private String email;
//private List<ProjectEntity> projects;
}
这是我的 ProjectEntity:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class ProjectEntity {
private Integer id;
private String name;
private String description;
private String location;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
private LocalDateTime creationDate;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
private LocalDateTime lastModifiedDate;
private Integer idUsers;
}
当我尝试检索对象时,出现以下错误:
org.jooq.exception.DataTypeException:未找到类型的转换器 java.lang.Integer 和 com.xmobots.domain.entities.UserEntity
为什么会发生这种情况,我该如何解决?
答:
1赞
Lukas Eder
10/27/2023
#1
在 jOOQ 中获取多对多关系的最佳方法是使用 MULTISET
运算符。它为映射添加了类型安全性,并允许投影任意级别的嵌套:
List<UserEntity> list =
dsl.select(
USERS.ID,
USERS.USERNAME,
USERS.PASSWORD, // Not convinced you want to project this, though?
USERS.EMAIL
multiset(
select(
PROJECT.ID,
PROJECT.NAME,
PROJECT.DESCRIPTION,
PROJECT.LOCATION,
PROJECT.CREATION_DATE,
PROJECT.LAST_MODIFIED_DATE
)
.from(PROJECT)
.where(PROJECT.ID_USERS.eq(USERS.ID))
).convertFrom(r -> r.map(Records.mapping(ProjectEntity::new)))
)
.from(USERS)
.where(USERS.ID.eq(1))
.fetch(Records.mapping(UserEntity::new));
如果您认为这更快/更适合您的情况,您也可以使用您的,在这种情况下,您可以使用MULTISET_AGG
嵌套集合。此替代方法将起作用,因为您只有 1 个嵌套集合。JOIN
评论
select()