2014-09-11 4 views
0

저는 스프링 - 최대 절전 모드를 배우고 있고 웹 서비스 작동을 얻으려고하고 있지만 지금은이 상황에 처해 있습니다. 데이터를 가져 오는 내 서비스는 잘 작동하지만 난 게시 할 때이 조건이 발생 :@generatedvalue가 작동하지 않고 여전히 수동으로 ID를 할당하도록 요청했습니다.

  1. 을 내가 이미 같은 입력하지의 modif 노력
  2. @generated 값 주석을 사용 : (전혀 GenerationType.SEQUENCE, IDENTITY 등 그들에게) 중 하나가 작동

지금까지 내 추측은, 그래서 이것은 내 코드

입니다 이것은 내 모델 클래스 (의 일부), 다른 하나는 등의 이메일, 전화, 같은 전형적인 그리고 그것은 해달라고입니다 다른 테이블에 대한 관계, 오직 내 DB에 1 테이블을 사용 btw 내가 사용하는 석사 sq L 서버

@Entity 
@Table(name="Patient") 
@SuppressWarnings("serial") 
public class Patient implements Serializable { 

    @Id 
    @GenericGenerator(name = "guidGenerator", strategy = "guid") 
    @GeneratedValue(generator= "guidGenerator") 
    @Column(name = "PatientGUID", columnDefinition="uniqueidentifier") 
    private String patientGuid; 
    private String firstName; 
    private String lastName; 

    public String getPatientGuid() { 
     return patientGuid; 
    } 

    public void setPatientGuid(String patientGuid) { 
     this.patientGuid = patientGuid; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

편집 : 내 HBM 파일

<hibernate-mapping package="training.model"> 
<class name="Patient" table="Patient">  
    <id name="patientGuid" type="string"> 
     <column name="PatientGUID" /> 
     <generator class="assigned" /> 
    </id> 

    <property name="practiceGuid" type="string"> 
     <column name="PracticeGUID" sql-type="varchar" length="38" not-null="true" /> 
    </property> 
    <property name="firstName" type="string"> 
     <column name="FirstName" sql-type="varchar" length="30" not-null="true" /> 
    </property> 

    <property name="lastName" type="string"> 
     <column name="LastName" sql-type="varchar" length="30" not-null="true" /> 
    </property> 
</class> 
</hibernate-mapping> 

내 테이블 세부 내가이 problim 원인 추정된다 : 을 PatientGUID하고 난 내 웹 서비스를 실행할 때의 유형은 고유 식별자입니다 POST 메서드를 요청하여 환자에게 오류가 발생했습니다 :

이 클래스는 save()를 호출하기 전에 수동으로 할당되어야합니다.

그래서 저는 정말로 도움이 필요합니까? 무엇이 잘못 되었습니까? 당신이 내 코드에 더 이상 세부 사항이 필요하면 그냥 코멘트, 감사

편집 떠나 : 오류 메시지

Caused by: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually    assigned before calling save(): training.model.Patient 
at org.hibernate.id.Assigned.generate(Assigned.java:52) 
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:117) 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:206) 
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:191) 
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:764) 
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:756) 
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:752) 
at training.dao.PatientDaoImpl.savePatient(PatientDaoImpl.java:40) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) 
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) 
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) 
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
at com.sun.proxy.$Proxy20.savePatient(Unknown Source) 
at training.service.PatientServiceImpl.addPatient(PatientServiceImpl.java:29) 
at training.ws.PatientWS.addPatients(PatientWS.java:110) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180) 
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96) 

답변

0

최대 절전 모드에서 더 guid 전략이 ​​없다가, 그러나 uuid있다. 다음은 작동해야합니다.

@GenericGenerator(name = "guidGenerator", strategy = "uuid2") 
+0

나는 봄 - 최대 절전 모드에 익숙하다. 나는 그걸 시도했지만 여전히 운이 없다. 아마 내가 놓친 무엇인가? 어쩌면 hibernate.properties 나 hibernate.cfg.xml과 같은 또 다른 설정에서. –