2014-09-11 82 views
0

我正在学习spring-hibernate,并试图让我的web服务工作,但现在我坚持这种情况。我对获取数据的服务工作得很好,但是当我尝试发布此情况发生:@generatedvalue不工作,仍然要求手动分配ID

  1. 我已经使用@generated值注释
  2. 试图修饰的它的类型,如:GenerationType.SEQUENCE,身份等(没有的他们要么工作)

到目前为止我最好的猜测,所以这是我的代码

这是我的模型类(的一部分),另一种是典型如电子邮件,电话等它不具有任何关系到另一个表,我的数据库btw只有一个表我使用ms 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,它的类型是UNIQUEIDENTIFIER,当我执行我的web服务并要求POST方法发布我的病人我得到一个错误,这是:

IDS这个类必须在调用save()前手动赋值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

没有​​策略在Hibernate中,然而有uuid。以下应该工作。

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

我是新来的春季冬眠,我试过了,仍然没有运气。可能是我错过了什么?也许在另一个配置中,如:hibernate.properties或hibernate.cfg.xml。 – 2014-09-11 05:10:46