spring MVC.java.sql.BatchUpdateException中的hibernate错误:违反了唯一约束(OVERFLOW.SYS_C004914)

spring MVC.java.sql.BatchUpdateException中的hibernate错误:违反了唯一约束(OVERFLOW.SYS_C004914),java,spring,hibernate,spring-mvc,hql,Java,Spring,Hibernate,Spring Mvc,Hql,我试图通过注册表保存用户的详细信息。我使用3个模型类,一个是user、roles、person。user表中的主键是roles和person表中的外键。 我在角色和人物中都使用了OneToOne映射 这是我的UserModel类 @Entity @Table(name="Login") public class User{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String use

我试图通过注册表保存用户的详细信息。我使用3个模型类,一个是user、roles、person。user表中的主键是roles和person表中的外键。 我在角色和人物中都使用了OneToOne映射

这是我的
User
Model类

@Entity
@Table(name="Login")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

private String username;
private String password;

//Rest are getters and Setters  
我的
Person
模型类是

@Entity
public class Person{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private  int pid;
private String email;
private String Gender;
@OneToOne
private User uid;
我的
角色
表为

@Entity 
@Table(name = "Auth")
public class Roles implements Serializable{
@Id
private  int id;
@Column(name = "Authority")
private String role;
@OneToOne
private User u_id;
在我的dao中,我试图插入这些

 public static boolean register(Person p,User u,Roles r)
 {
 Session s=sf.openSession();
 s.beginTransaction();
 s.save(u);
 s.save(p); 
 s.save(r);
 s.getTransaction().commit();
 s.flush();
 s.close();

 return true;
我得到的例外是

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/spring7]
        threw exception [Request processing failed;
        nested exception is org.hibernate.exception.ConstraintViolationException:
            Could not execute JDBC batch update] 
        with root cause java.sql.BatchUpdateException: ORA-00001: 
            unique constraint (OVERFLOW.SYS_C004914) violated

at oracle.jdbc.driver.DatabaseError.throwBatchUpdateException(DatabaseError.java:343)
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10657)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.rahul.dao.Dao.register(Dao.java:40)
at com.rahul.controller.LoginController.reg(LoginController.java:55)
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:601)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

从给出的信息中,我可以在下面找到答案

@角色实体中的id字段缺少GeneratedValue(strategy=GenerationType.AUTO)。虽然我认为auto是默认值,但它仍然值得反复检查


因为错误清楚地表明了它唯一的键约束。我猜您的数据库中定义了一些检查约束。外键允许重复值。

那么,如何定义约束OVERFLOW.SYS\u C004914?