Kotlin DTO实体映射递归问题

时间:2020-07-31 14:27:41

标签: spring kotlin

所以我想将Dto映射到Entity,反之亦然,但是由于它们之间存在双向连接,因此我遇到了递归错误,有没有简单的解决方法,我只是开始使用kotlin并没有找到任何解决方案

这些是我的扩展类。

RegistrationRuleExtension.kt

fun RegistrationRuleEntity.toDto() = RegistrationRuleDto(
    id = id,
    count = count,
    description = description,
    tier = tier,
    licenses = licenses?.map { license -> license.toDto()}
)

fun RegistrationRuleDto.toEntity() = RegistrationRuleEntity(
        id = id,
        count = count,
        description = description,
        tier = tier,
        licenses = licenses?.map { license -> license.toEntity()}
)

LicenseExtension.kt

fun LicenseEntity.toDto() = LicenseDto(
        id = id,
        name = name,
        licenseId = licenseId,
        rules = rules?.map { rule -> rule.toDto() },
        version = version
)

fun LicenseDto.toEntity() = LicenseEntity(
        id = id,
        name = name,
        licenseId = licenseId,
        rules = rules?.map { rule -> rule.toEntity() },
        version = version
)

如果我理解正确,那么问题是我的许可证在规则上为.toDto调用了,然后规则要在我的许可证上调用.toDto,并且陷入了无限循环。

感谢您提前回答!

1 个答案:

答案 0 :(得分:0)

所以我有一些来自朋友和同事的想法。

我的第一个想法:

由于许可证知道它具有哪些规则,因此我没有真正理由要获得该规则的许可证,因此我可以将其设置为空。

第二个想法:

我只将规则的ID存储在许可证上,如果需要该规则,我会通过它们的ID请求它们。

如果您有其他想法,请随时对其进行评论。 :D