I searched around on the forums but was unable to find a solution to this problem.
I am trying to update a foreign key in one of my tables.
Basically a form has a select with a list of "BugSeverity" entries with the ID as the value
The Bug table has a foreign key constraint to the BugSeverity table
I am not trying to modify the BugSeverity table just the Bug table.
Here is all the code that is used for this.
The error:
Code:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.orm.hibernate3.HibernateSystemException: identifier of an instance of com.odinnet.data.Bugseverity was altered from 3 to 4; nested exception is org.hibernate.HibernateException: identifier of an instance of com.odinnet.data.Bugseverity was altered from 3 to 4
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:488)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
org.springframework.orm.hibernate3.HibernateSystemException: identifier of an instance of com.odinnet.data.Bugseverity was altered from 3 to 4; nested exception is org.hibernate.HibernateException: identifier of an instance of com.odinnet.data.Bugseverity was altered from 3 to 4
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:659)
org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:690)
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:566)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:319)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy13.saveBug(Unknown Source)
com.odinnet.service.SoftwareService.saveBug(SoftwareService.java:102)
com.odinnet.mvc.EditBugController.onSubmit(EditBugController.java:33)
org.springframework.web.servlet.mvc.SimpleFormController.onSubmit(SimpleFormController.java:381)
org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:267)
org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:265)
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:874)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
root cause
org.hibernate.HibernateException: identifier of an instance of com.odinnet.data.Bugseverity was altered from 3 to 4
org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:58)
org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:164)
org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:120)
org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:558)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:662)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:632)
org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:319)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy13.saveBug(Unknown Source)
com.odinnet.service.SoftwareService.saveBug(SoftwareService.java:102)
com.odinnet.mvc.EditBugController.onSubmit(EditBugController.java:33)
org.springframework.web.servlet.mvc.SimpleFormController.onSubmit(SimpleFormController.java:381)
org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:267)
org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:265)
org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:874)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
Mapping files:
Bug
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.odinnet.data.Bug" table="bug" catalog="odinnet2">
<id name="bugId" type="java.lang.Integer">
<column name="BugID" />
<generator class="identity" />
</id>
<many-to-one name="bugpriority" class="com.odinnet.data.Bugpriority" fetch="select">
<column name="PriorityID" not-null="true" />
</many-to-one>
<many-to-one name="userByAssignedTo" class="com.odinnet.data.User" fetch="select">
<column name="AssignedTo" />
</many-to-one>
<many-to-one name="bugstatus" class="com.odinnet.data.Bugstatus" fetch="select">
<column name="StatusID" not-null="true" />
</many-to-one>
<many-to-one name="software" class="com.odinnet.data.Software" fetch="select">
<column name="SoftwareID" not-null="true" />
</many-to-one>
<many-to-one name="bugseverity" class="com.odinnet.data.Bugseverity" fetch="select">
<column name="SeverityID" not-null="true" />
</many-to-one>
<many-to-one name="userByReporterId" class="com.odinnet.data.User" fetch="select">
<column name="ReporterID" not-null="true" />
</many-to-one>
<property name="summary" type="java.lang.String">
<column name="Summary" not-null="true" />
</property>
<property name="description" type="java.lang.String">
<column name="Description" length="65535" not-null="true" />
</property>
<property name="dateAdded" type="java.lang.Long">
<column name="DateAdded" not-null="true" />
</property>
<property name="dateFixed" type="java.lang.Long">
<column name="DateFixed" />
</property>
<set name="bugnotes" inverse="true" order-by="dateAdded">
<key>
<column name="BugID" not-null="true" />
</key>
<one-to-many class="com.odinnet.data.Bugnote" />
</set>
<set name="bughistories" inverse="true" order-by="dateOccurred">
<key>
<column name="BugID" not-null="true" />
</key>
<one-to-many class="com.odinnet.data.Bughistory"/>
</set>
</class>
</hibernate-mapping>
BugSeverity
Code:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.odinnet.data.Bugseverity" table="bugseverity" catalog="odinnet2">
<id name="severityId" type="java.lang.Integer">
<column name="SeverityID" />
<generator class="identity" />
</id>
<property name="severityName" type="java.lang.String">
<column name="SeverityName" length="20" not-null="true" />
</property>
<property name="severityValue" type="java.lang.Integer">
<column name="SeverityValue" not-null="true" />
</property>
<property name="defaultSeverity" type="java.lang.Byte">
<column name="DefaultSeverity" not-null="true" />
</property>
<set name="bugs" inverse="true">
<key>
<column name="SeverityID" not-null="true" />
</key>
<one-to-many class="com.odinnet.data.Bug" />
</set>
</class>
</hibernate-mapping>
The POJOs:
Code:
package com.odinnet.data;
import java.util.HashSet;
import java.util.Set;
public class Bugseverity implements java.io.Serializable {
// Fields
private Byte defaultSeverity;
private Integer severityId;
private String severityName;
private Integer severityValue;
private Set bugs = new HashSet(0);
// Constructors
/** default constructor */
public Bugseverity() {
}
/** minimal constructor */
public Bugseverity(Integer severityId, String severityName,
Integer severityValue) {
this.severityId = severityId;
this.severityName = severityName;
this.severityValue = severityValue;
}
/** full constructor */
public Bugseverity(Integer severityId, String severityName,
Integer severityValue, Set bugs) {
this.severityId = severityId;
this.severityName = severityName;
this.severityValue = severityValue;
this.bugs = bugs;
}
// Property accessors
public Integer getSeverityId() {
return this.severityId;
}
public void setSeverityId(Integer severityId) {
this.severityId = severityId;
}
public String getSeverityName() {
return this.severityName;
}
public void setSeverityName(String severityName) {
this.severityName = severityName;
}
public Integer getSeverityValue() {
return this.severityValue;
}
public void setSeverityValue(Integer severityValue) {
this.severityValue = severityValue;
}
public Set getBugs() {
return this.bugs;
}
public void setBugs(Set bugs) {
this.bugs = bugs;
}
public Byte getDefaultSeverity() {
return this.defaultSeverity;
}
public void setDefaultSeverity(Byte defaultSeverity) {
this.defaultSeverity = defaultSeverity;
}
}
Code:
package com.odinnet.data;
import java.util.HashSet;
import java.util.Set;
public class Bug implements java.io.Serializable {
// Fields
private Integer bugId;
private Bugpriority bugpriority;
private User userByAssignedTo;
private Bugstatus bugstatus;
private Software software;
private Bugseverity bugseverity;
private User userByReporterId;
private String summary;
private String description;
private Long dateAdded;
private Long dateFixed;
private Set bugnotes = new HashSet(0);
private Set bughistories = new HashSet(0);
// Constructors
/** default constructor */
public Bug() {
}
/** minimal constructor */
public Bug(Integer bugId, Bugpriority bugpriority, Bugstatus bugstatus,
Software software, Bugseverity bugseverity, User userByReporterId,
String summary, String description, Long dateAdded) {
this.bugId = bugId;
this.bugpriority = bugpriority;
this.bugstatus = bugstatus;
this.software = software;
this.bugseverity = bugseverity;
this.userByReporterId = userByReporterId;
this.summary = summary;
this.description = description;
this.dateAdded = dateAdded;
}
/** full constructor */
public Bug(Integer bugId, Bugpriority bugpriority, User userByAssignedTo,
Bugstatus bugstatus, Software software, Bugseverity bugseverity,
User userByReporterId, String summary, String description,
Long dateAdded, Long dateFixed, Set bugnotes, Set bughistories) {
this.bugId = bugId;
this.bugpriority = bugpriority;
this.userByAssignedTo = userByAssignedTo;
this.bugstatus = bugstatus;
this.software = software;
this.bugseverity = bugseverity;
this.userByReporterId = userByReporterId;
this.summary = summary;
this.description = description;
this.dateAdded = dateAdded;
this.dateFixed = dateFixed;
this.bugnotes = bugnotes;
this.bughistories = bughistories;
}
// Property accessors
public Integer getBugId() {
return this.bugId;
}
public void setBugId(Integer bugId) {
this.bugId = bugId;
}
public Bugpriority getBugpriority() {
return this.bugpriority;
}
public void setBugpriority(Bugpriority bugpriority) {
this.bugpriority = bugpriority;
}
public User getUserByAssignedTo() {
return this.userByAssignedTo;
}
public void setUserByAssignedTo(User userByAssignedTo) {
this.userByAssignedTo = userByAssignedTo;
}
public Bugstatus getBugstatus() {
return this.bugstatus;
}
public void setBugstatus(Bugstatus bugstatus) {
this.bugstatus = bugstatus;
}
public Software getSoftware() {
return this.software;
}
public void setSoftware(Software software) {
this.software = software;
}
public Bugseverity getBugseverity() {
return this.bugseverity;
}
public void setBugseverity(Bugseverity bugseverity) {
this.bugseverity = bugseverity;
}
public User getUserByReporterId() {
return this.userByReporterId;
}
public void setUserByReporterId(User userByReporterId) {
this.userByReporterId = userByReporterId;
}
public String getSummary() {
return this.summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
public Long getDateAdded() {
return this.dateAdded;
}
public void setDateAdded(Long dateAdded) {
this.dateAdded = dateAdded;
}
public Long getDateFixed() {
return this.dateFixed;
}
public void setDateFixed(Long dateFixed) {
this.dateFixed = dateFixed;
}
public Set getBugnotes() {
return this.bugnotes;
}
public void setBugnotes(Set bugnotes) {
this.bugnotes = bugnotes;
}
public Set getBughistories() {
return this.bughistories;
}
public void setBughistories(Set bughistories) {
this.bughistories = bughistories;
}
}
The DAO code:
Code:
@Transactional(propagation=Propagation.REQUIRED)
public void saveBug(Bug bug) {
sessionFactory.getCurrentSession().saveOrUpdate(bug);
}
The business logic code:
Code:
public void saveBug(Bug bug){
long time = Calendar.getInstance().getTimeInMillis();
bug.setBugseverity(softwareDAO.getBugSeverity(bug.getBugseverity().getSeverityId()));
Bughistory history = new Bughistory();
history.setDateOccurred(time);
history.setHistoryItem("Bug Updated");
history.setBug(bug);
Set histories = new HashSet();
histories.add(history);
bug.setBughistories(histories);
softwareDAO.saveBug(bug);
}
The form submission code:
Code:
package com.odinnet.mvc;
import javax.servlet.http.HttpServletRequest;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import com.odinnet.service.SoftwareService;
import com.odinnet.data.Bug;
import java.util.HashMap;
import java.util.Map;
public class EditBugController extends SimpleFormController{
public EditBugController() {
setCommandClass(Bug.class);
setCommandName("bug");
}
@Override
protected Object formBackingObject(HttpServletRequest request) throws Exception{
Bug bugForm = (Bug)super.formBackingObject(request);
bugForm = softwareService.getBug(Integer.parseInt(request.getParameter("id")));
return bugForm;
}
@Override
protected Map referenceData(HttpServletRequest request) throws Exception {
Map data = new HashMap();
data.put("software",softwareService.listSoftware());
data.put("severities",softwareService.listBugSeverities());
data.put("priorities",softwareService.listBugPriorities());
data.put("statuses",softwareService.listBugStatuses());
return data;
}
@Override
protected ModelAndView onSubmit(Object command, BindException bindException) throws Exception {
Bug bug = (Bug)command;
softwareService.saveBug(bug);
return new ModelAndView(getSuccessView());
}
private SoftwareService softwareService;
public void setSoftwareService(SoftwareService softwareService){
this.softwareService = softwareService;
}
}
I am unsure of what I am doing wrong, but this (to me) is all experimental code so i can change anything include the database as I please.
Any help would be appreciated.