Парни, прошу помощи. Делаю приложение spring, hiberhate. Пытаюсь сделать добавление юзеров.
Есть две таблицы company и users, связь один ко многим.
таблица company
CID (PK, numeric(18,0), not null)
CompanyName (varchar(50), not null)
таблица users
UID (PK, numeric(18,0), not null)
UserName (varchar(50), not null)
CID (FK, numeric(18,0), not null)
Добавление компаний работает, а добавление юзеров бьет ошибку. походу неможет записать значение в users.CID
Непонимаю почему эта ошибка вылазит.
Ума неприложу, чего я неправильно сделал. Может в маппинге неточность или в jspшке это поле неправильно описал.
Вот эта ошибка:
1.
2.
Data access failure: Hibernate operation: could not insert: [demo.model.User]; SQL [insert into WebminDB.dbo.users (UserName, CID, UID) values (?, ?, ?)]; Cannot insert the value NULL into column 'CID', table 'WebminDB.dbo.users'; column does not allow nulls. INSERT fails.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'CID', table 'WebminDB.dbo.users'; column does not allow nulls. INSERT fails.
org.springframework.dao.DataIntegrityViolationException: Hibernate operation: could not insert: [demo.model.User]; SQL [insert into WebminDB.dbo.users (UserName, CID, UID) values (?, ?, ?)]; Cannot insert the value NULL into column 'CID', table 'WebminDB.dbo.users'; column does not allow nulls. INSERT fails.; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'CID', table 'WebminDB.dbo.users'; column does not allow nulls. INSERT fails. com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'CID', table 'WebminDB.dbo.users'; column does not allow nulls. INSERT fails. at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source) at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteUpdate(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source) at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java: 22 ) at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java: 1853 ) at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java: 2200 ) at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java: 46 ) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java: 239 ) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java: 223 ) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java: 136 ) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java: 274 ) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java: 27 ) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java: 730 ) at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java: 394 ) at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java: 367 ) at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java: 614 ) at demo.hibernate.UserDaoHibernate.addUser(UserDaoHibernate.java: 12 ) at demo.service.UserServiceImpl.addUser(UserServiceImpl.java: 9 ) at demo.web.AddUserController.doSubmitAction(AddUserController.java: 37 ) at org.springframework.web.servlet.mvc.SimpleFormController.onSubmit(SimpleFormController.java: 415 ) at org.springframework.web.servlet.mvc.SimpleFormController.onSubmit(SimpleFormController.java: 382 ) at org.springframework.web.servlet.mvc.SimpleFormController.onSubmit(SimpleFormController.java: 356 ) at org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java: 258 ) at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java: 249 ) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java: 153 ) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java: 44 ) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java: 723 ) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java: 663 ) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java: 394 ) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java: 358 ) at javax.servlet.http.HttpServlet.service(HttpServlet.java: 709 ) at javax.servlet.http.HttpServlet.service(HttpServlet.java: 802 ) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 252 ) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 173 ) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java: 75 ) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java: 77 ) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 202 ) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 173 ) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 213 ) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 178 ) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 126 ) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 105 ) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 107 ) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 148 ) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java: 833 ) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java: 639 ) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java: 1285 ) at java.lang.Thread.run(Thread.java: 595 )
Вот jspшка с формой для добавления юзера
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
<%@ include file="/WEB-INF/jsp/includes.jsp" %>
<%@ page contentType="text/html; charset=windows-1251" %>
<form method="POST">
<table border="0" cellspacing="5" cellpadding="0">
<tr><td valign="middle" align="left">
<b>CID: </b>
</td><td valign="middle" align="left">
<spring:bind path="command.company">
<select name="companyId">
<c:forEach items="${companys}" var="company">
<OPTION value="<c:out value="${company.id}"/>">
<c:out value="${company.companyName}"/>
</OPTION>
</c:forEach>
</SELECT>
</spring:bind>
</td>
</tr>
<tr>
<td valign="middle" align="left">
<b>UserName:</b>
</td>
<td valign="middle" align="left">
<spring:bind path="command.userName">
<input type="text" maxlength="50" name="userName"><br>
</spring:bind>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Create">
</td>
</tr>
</table>
</form>
В контроллере я передаю список компаний для использования в форме
1.
2.
3.
4.
5.
protected Map referenceData(HttpServletRequest request) throws ServletException, NullPointerException {
Map<String, Collection<?>> refData = new HashMap<String, Collection<?>>();
refData.put("companys", this .companyService.getCompanys());
return refData;
}
метод getCompanys
1.
2.
3.
public Collection getCompanys() throws DataAccessException {
return getHibernateTemplate().find("from Company company order by company.companyName");
}
а это маппинг user.hbm.xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto- import ="true" default -lazy="false">
< class name="demo.model.User" table="users" schema="dbo" catalog="WebminDB">
<id name="id" column="UID">
<generator class ="increment"/>
</id>
<property name="userName" column="UserName"/>
<many-to-one name="company" column="CID" class ="demo.model.Company"/>
</ class >
</hibernate-mapping>
маппинг company.hbm.xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto- import ="true" default -lazy="false">
< class name="demo.model.Company" table="company" schema="dbo" catalog="WebminDB">
<id name="id" column="CID">
<generator class ="increment"/>
</id>
<property name="companyName" column="CompanyName"/>
<set name="usersInternal" inverse="true" cascade="all">
<key column="CID"/>
<one-to-many class ="demo.model.User"/>
</set>
</ class >
</hibernate-mapping>