【问题标题】:Kotlin JpaRepository saves new empy object for an updateKotlin Jpa Repository 保存新的空对象以进行更新
【发布时间】:2019-01-11 20:38:24
【问题描述】:

所以我使用的是 spring boot 和 kotlin。当我发布一个对象时,如果我在数据库中有一个对象,我会使用 uuid 进行查找。如果我这样做了,那么我修改那个,否则使用一个新实例。

当我查看数据库时,我看到了我的更新版本,然后是一个新的空行。

我可以看到更新的时间戳,如果我使用调试器来操作它保存的值。但是总是有一个新行,有一个新的 ID,所有的字段都是空的

服务

@Service("claimService")
class ClaimService {

    @Autowired
    lateinit var billingCodeRepository: BillingCodeRepository

    @Autowired
    lateinit var claimRepository: ClaimRepository

    @Autowired
    lateinit var specialtyRepository: SpecialtyRepository

    @Autowired
    lateinit var doctorRepository: DoctorRepository

    fun saveClaim(submittedClaim: ClaimDto) {

        val existingClaim: Optional<Claim> = claimRepository.findById(submittedClaim.claim.uuid)
        if (existingClaim.isPresent)
        {
            convertClaimFromDto(submittedClaim, existingClaim.get())
        } else {
            val claim = Claim()
            convertClaimFromDto(submittedClaim, claim)
        }
    }

    fun convertClaimFromDto(submittedClaim: ClaimDto, claim: Claim)
    {

        claim.payProgram = submittedClaim.claim.payProgram
        claim.dxCode = submittedClaim.claim.dxCode
        claim.facility = submittedClaim.claim.facility
        claim.billingDate = DateUtil.convertDate(submittedClaim.claim.claimDate)
        claim.patient = convertPatientFromDto(submittedClaim.claim.patient)

        for(billingCode in submittedClaim.claim.billedCodes)
        {
            val billedCode: Optional<BillingCode> = billingCodeRepository.findById(billingCode.code)
            if (billedCode.isPresent)
            {
                val claimCode = BilledCodes()
                claimCode.billingCode = billedCode.get()
                claimCode.billed = billingCode.amountBilled
                claim.billedCodes.add(claimCode)
            }
        }

        //Test values
        val testDoc: Optional<ca.billingpro.billingcore.Domain.Doctor> = doctorRepository.findById(1)
        claim.doc = testDoc.get()
        claim.createdBy = "TestPoint"

        claimRepository.save(claim)
    }

    fun convertPatientFromDto(submittedPatient: ClaimDto.Claim.Patient): Patient
    {
        val patient = Patient()
        patient.DOB = DateUtil.convertDate(submittedPatient.DOB)
        patient.name = submittedPatient.name
        patient.ohipNo = submittedPatient.ohipNo
        patient.ohipVer = submittedPatient.ohipNo
        patient.sex = submittedPatient.sex
        return patient
    }

 }

声称

@Entity
data class Claim (

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    var uuid: String = ""
    )
    {

    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    var claimNo: Long = 0

    var status: ClaimStatus = ClaimStatus.CREATED

    var billingDate: LocalDate = LocalDate.now()

    var lastUpdated: LocalDateTime = LocalDateTime.now()

    var facility: String = ""

    var payProgram: String = ""

    var createdAt:LocalDateTime = LocalDateTime.now()

    var createdBy: String = ""

    var dxCode: String = ""

    var notes: String = ""

    @ManyToOne(cascade = [CascadeType.ALL])
    var patient: Patient = Patient()

    @ManyToOne(cascade = [CascadeType.ALL])
    var doc: Doctor = Doctor()

    @OneToMany(cascade = [CascadeType.ALL], mappedBy = "claim")
    var billedCodes: MutableList<BilledCodes> = mutableListOf<BilledCodes>()

    @PrePersist
    @PreUpdate
    fun updateClaim()
    {
        lastUpdated = LocalDateTime.now()
    }
}

存储库

@Repository
interface ClaimRepository : CrudRepository<Claim, String>

5bdf8247-5c66-4a9e-9101-450588d5e6b8    2018-01-01  2   2018-08-03 20:41:03 TestPoint   1234    1234    2018-08-03 20:56:41 ""  HCP 0   1   47
a9200e84-643b-409a-9c44-2b69aa8a9823    2018-08-03  0   2018-08-03 20:56:41 ""  ""  ""  2018-08-03 20:56:41 ""  ""  0   23  46
16249817-6f4b-46df-a959-ec0595bb06d7    2018-01-01  0   2018-08-03 20:57:03 TestPoint   1234    1234    2018-08-03 20:57:03 ""  HCP 0   1   48
6799275b-e067-439e-aec1-2f9166e9b2ba    2018-08-03  0   2018-08-03 20:57:03 ""  ""  ""  2018-08-03 20:57:03 ""  ""  0   24  49
76c2fd49-5a92-4e3a-a8db-d882beb635e2    2018-01-01  0   2018-08-03 21:07:14 TestPoint   1234    1234    2018-08-03 21:07:14 ""  HCP 0   1   50
fec419d9-ae9d-4d53-a287-add14b1cd373    2018-08-03  0   2018-08-03 21:07:14 ""  ""  ""  2018-08-03 21:07:14 ""  ""  0   25  51

测试功能

@Component
class ApplicationStartup: ApplicationListener<ApplicationReadyEvent>
{
    @Autowired
    lateinit var claimService: ClaimService
    override fun onApplicationEvent(event: ApplicationReadyEvent) {
        //var claimService: ClaimService = ClaimService()
        var testStr = "{\"claim\":{\"uuid\": \"5bdf8247-5c66-4a9e-9101-450588d5e610\",\"claimNo\": 123,\"status\": \"CREATED\",\"claimDate\": \"2018-01-01\",\"facility\": \"1234\",\"dxCode\": \"1234\",\"notes\": \"test notes\",\"payProgram\": \"HCP\",\"patient\": {\"name\": \"first last\",\"DOB\": \"1992-05-06\",\"ohipNo\": \"123456789\",\"verCode\": \"AA\",\"sex\": \"M\"},\"billedCodes\": [{\"code\": \"A001A\",\"amountBilled\": 19.21,\"amountPaid\": 0.0}]}}"
        val mapper = jacksonObjectMapper()
        val claimTest = mapper.readValue<ClaimDto>(testStr)
        claimService.saveClaim(claimTest)
    }
}

【问题讨论】:

  • 请贴出Claim.kt的代码
  • 我很累,但我认为它主要是代码......
  • 请正确格式化
  • @WilliMentzel 抱歉,格式有什么问题?
  • 请正确缩进你的代码

标签: spring-boot kotlin spring-data-jpa


【解决方案1】:

所以答案是我对帐单代码进行映射的方式。删除该关系不再重复保存。

关系需要@Transient 标志,而帐单代码的映射需要由映射者

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多