0

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

这是我的User模型类

@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;

我的Roles桌子是

@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)
4

1 回答 1

0

根据给出的信息,我可以在下面找到

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

正如错误清楚地表明其独特的关键约束违反。我的猜测是在您的数据库中定义了一些检查约束。外键允许重复值。

于 2013-06-29T11:53:14.840 回答