我一直在try JOOQ 3.17的一些新特性,例如类型安全的嵌套表记录与隐式连接混合在一起,如下所述:
https://blog.jooq.org/projecting-type-safe-nested-tablerecords-with-jooq-3-17/个
我们有一个复杂的视图,您可以在其中修改"公司"对象的许多属性.我们的旧代码在一个相当大的UI上有无数Hibernate方法来CRUD COMPANY对象的相关记录.现在我想用JOOQ重写这段代码.我想出了一个查询来拉出一个CompanyRecord和相关记录,如下所示:
Record4<CompanyRecord, Result<ServiceCompanyPreferenceRecord>, Result<SubsidiaryRecord>, Result<CompanyCo2ParameterRecord>> fancyTypeResult =
dslContext.get().select(
Tables.COMPANY,
multiset(
selectFrom(Tables.SERVICE_COMPANY_PREFERENCE)
.where(Tables.SERVICE_COMPANY_PREFERENCE.COMPANY_ID.eq(Tables.COMPANY.ID))
),
multiset(
selectFrom(Tables.SUBSIDIARY)
.where(Tables.SUBSIDIARY.COMPANY_ID.eq(Tables.COMPANY.ID))
),
multiset(
selectFrom(Tables.COMPANY_CO2_PARAMETER)
.where(Tables.COMPANY_CO2_PARAMETER.COMPANY_ID.eq(Tables.COMPANY.ID))
)
)
.from(Tables.COMPANY)
.where(Tables.COMPANY.ID.eq(companyId))
.fetchOne();
这非常棒,因为我可以修改和保存CompanyRecord或和相关的ServiceCompanyPferenceRecord、SubsidiaryRecord或CompanyCo2参数记录,并且数据库中的那些行将被更新.
我遇到的一个问题是传递类型"Record4<CompanyRecord, Result<ServiceCompanyPreferenceRecord>, Result<SubsidiaryRecord>, Result<CompanyCo2ParameterRecord>>"
相当冗长.所以有一个功能,可以找到一家公司所有这样的记录
public Record4<CompanyRecord, Result<ServiceCompanyPreferenceRecord>, Result<SubsidiaryRecord>, Result<CompanyCo2ParameterRecord>> loadCompanyAndRelatedPreferences(Long companyId){ ....
这可能有点不对劲.我想知道,如果简单地创建一个包含类型为"Record4<CompanyRecord, Result<ServiceCompanyPreferenceRecord>, Result<SubsidiaryRecord>, Result<CompanyCo2ParameterRecord>>"
的字段的POJO会不会更容易,因为我可以使用该POJO,而无需反复重写该类型.另一种 idea 是,这是Java记录的好用例吗?
我们有许多屏幕都遵循这种模式.调出一条记录和相关记录,清理它们.你有什么好办法来处理这件事吗?