java - 对于 : 1, 类模型,找到了多个具有给定标识符的行 : com.。诊断

标签 java spring hibernate

下面是我的代码的模型、服务实现和错误跟踪。

模型类:

@Entity
@Table(name = "ph_diagnosis_history")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id",scope=Diagnosis.class)
public class Diagnosis extends AbstractEntity {
    @Column(name = "diagnosis_notes", length=255)
    @Length(max = 255, message = IprProp.MAX_LEN_255_MSG)
    private String diagnosisNote;

    @Enumerated(EnumType.STRING)
    private DiagnosisTypeEnum type;

    @Temporal(TemporalType.DATE)
    @Column(name = "diagnosis_date")
    @JsonSerialize(using = JsonDateSerializer.class)
    private Date diagnosisDate;

    @ManyToOne
    @JoinColumn(name = "patient_chart_id")
    private PatientChart patientChart;

    public String getDiagnosisNote() {
        return diagnosisNote;
    }

    public void setDiagnosisNote(String diagnosisNote) {
        this.diagnosisNote = diagnosisNote;
    }

    public DiagnosisTypeEnum getType() {
        return type;
    }

    public void setType(DiagnosisTypeEnum type) {
        this.type = type;
    }

    public Date getDiagnosisDate() {
        return diagnosisDate;
    }

    public void setDiagnosisDate(Date diagnosisDate) {
        this.diagnosisDate = diagnosisDate;
    }

    public PatientChart getPatientChart() {
        return patientChart;
    }

    public void setPatientChart(PatientChart patientChart) {
        this.patientChart = patientChart;
    }
}

我的服务:

public Diagnosis updateDiagnosis(IPRDTO clientDto, Long userId,
        Long patientChartId, DiagnosisDTO diagnosisDTO, Long diagnosisId) throws Exception {
    Diagnosis diagnosis = diagnosisRepository.findOne(diagnosisId);
    if (diagnosis!=null){
        if(diagnosis.getType().equals(DiagnosisTypeEnum.WORKING)){
            BeanCopyUtil.copyProperties(diagnosisDTO, diagnosis, true);
            return this.diagnosisRepository.saveAndFlush(diagnosis);
        }
        else{
            throw new BusinessException("updateDiagnosisValidation"); 
        }
    }
    throw new BusinessException("noDiagnosis"); 
}

我的堆栈跟踪:

 [2014-09-08 11:34:08,148] INFO  com.zurelsoft.ipr.service.IDiagnosisService- Logged In User Id [1]:Started  updateDiagnosis
    diagnosis id 2
    [2014-09-08 11:34:08,969] INFO  org.hibernate.event.internal.DefaultLoadEventListener- HHH000327: Error performing load command : org.hibernate.HibernateException: More than one row with the given identifier was found: 2, for class: com.zurelsoft.ipr.model.Diagnosis
    [2014-09-08 11:34:09,001] ERROR com.zurelsoft.ipr.service.IDiagnosisService- Logged In User Id [1]:Error Occurred updateDiagnosis
    org.springframework.orm.jpa.JpaSystemException: org.hibernate.HibernateException: More than one row with the given identifier was found: 2, for class: com.zurelsoft.ipr.model.Diagnosis; nested exception is javax.persistence.PersistenceException: org.hibernate.HibernateException: More than one row with the given identifier was found: 2, for class: com.zurelsoft.ipr.model.Diagnosis
    [2014-09-08 11:34:09,006] ERROR com.zurelsoft.ipr.client.DiagnosisWebService- org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:321)
    org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:403)
    org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58)
    org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
    org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:163)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    com.sun.proxy.$Proxy85.findOne(Unknown Source)
    com.zurelsoft.ipr.service.impl.DiagnosisServiceImpl.updateDiagnosis(DiagnosisServiceImpl.java:76)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:51)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.invoke(AfterReturningAdviceInterceptor.java:51)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    com.sun.proxy.$Proxy86.updateDiagnosis(Unknown Source)
    com.zurelsoft.ipr.client.DiagnosisWebService.updateDiagnosis(DiagnosisWebService.java:98)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
    org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:849)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:644)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

尽管我的表现在有两行具有相同的 id,但我在这一行中收到了 HibernateException。

Diagnosis diagnosis = diagnosisRepository.findOne(diagnosisId);

请任何人帮助我解决我的错误。我的代码中可能存在什么错误。

最佳答案

嘿,这对我有用:

似乎我有两个选择:要么级联所有并删除一对一关系上的孤儿,要么在每次删除其与 Plate 的关系时显式调用我的存储库类来查找并保存原始工作表。我选择了第一个选择并将其添加到板类中:

@OneToOne(mappedBy = "plate", cascade = CascadeType.ALL, orphanRemoval = true)

https://stackoverflow.com/a/32636186/3255595

关于java - 对于 : 1, 类模型,找到了多个具有给定标识符的行 : com.。诊断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25718929/

相关文章:

java - XmlJavaTypeAdapter XmlElement 不适用于多个字段

java - Spring java代码表单发布并重定向到不同的服务器

java - Spring 批处理 : Does a scope job exist

java - Spring Boot - hibernate - 表不存在

java - 在 Spring 中设计积分系统

java - 使用 Spring/Spring Boot 注册 Bean Validation ValueExtractor

java - 如何将 arraylist 与数组一起使用?

Java ArrayUtils.toPrimitive 我不能做 ArrayUtils.removeElement

java - Spring JDBC - Kafka Consumer 的可重试异常

java - Spring 安全 : saved SecurityContext got a Null authentication