hibernate - javax.validation.ConstraintViolationException: Bean Validation constraint(s) violated while executing Automatic Bean Validation on event:'prePersist' -
given 2 entities department
, employee
forming unidirectional one-to-many relationship department
employee
based on respective tables in database in question follows.
public class department implements serializable { @id @generatedvalue(strategy = generationtype.identity) @basic(optional = false) @column(name = "department_id", nullable = false) private long departmentid; @size(max = 255) @column(name = "department_name", length = 255) private string departmentname; @size(max = 255) @column(length = 255) private string location; @version @basic(optional = false) @notnull @column(name = "row_version", nullable = false) private long rowversion; @joincolumn(name = "department_id", referencedcolumnname = "department_id", nullable = false) @onetomany(fetch = fetchtype.lazy, cascade = cascadetype.all, orphanremoval = true) private list<employee> employeelist = new arraylist<employee>(0); private static final long serialversionuid = 1l; // constructors + getters + setters + hashcode() + equals() + tostring(). }
public class employee implements serializable { @id @generatedvalue(strategy = generationtype.identity) @basic(optional = false) @column(name = "employee_id", nullable = false) private long employeeid; @size(max = 255) @column(name = "employee_name", length = 255) private string employeename; @version @basic(optional = false) @column(name = "row_version", nullable = false) private long rowversion; private static final long serialversionuid = 1l; // constructors + getters + setters + hashcode() + equals() + tostring(). }
while persisting relationship follows,
department department = new department(); department.setdepartmentname("x"); department.setlocation("x"); employee employee = new employee(); employee.setemployeename("x"); department.getemployeelist().add(employee); entitymanager.persist(department);
the following exception caused.
severe: exception while loading app : javax.ejb.createexception: initialization failed singleton singletonentry javax.ejb.createexception: initialization failed singleton singletonentry @ com.sun.ejb.containers.abstractsingletoncontainer.createsingletonejb(abstractsingletoncontainer.java:476) @ com.sun.ejb.containers.abstractsingletoncontainer.access$000(abstractsingletoncontainer.java:74) @ com.sun.ejb.containers.abstractsingletoncontainer$singletoncontextfactory.create(abstractsingletoncontainer.java:647) @ com.sun.ejb.containers.abstractsingletoncontainer.instantiatesingletoninstance(abstractsingletoncontainer.java:389) @ org.glassfish.ejb.startup.singletonlifecyclemanager.initializesingleton(singletonlifecyclemanager.java:219) @ org.glassfish.ejb.startup.singletonlifecyclemanager.initializesingleton(singletonlifecyclemanager.java:180) @ org.glassfish.ejb.startup.singletonlifecyclemanager.dostartup(singletonlifecyclemanager.java:158) @ org.glassfish.ejb.startup.ejbapplication.start(ejbapplication.java:166) @ org.glassfish.internal.data.engineref.start(engineref.java:122) @ org.glassfish.internal.data.moduleinfo.start(moduleinfo.java:291) @ org.glassfish.internal.data.applicationinfo.start(applicationinfo.java:352) @ com.sun.enterprise.v3.server.applicationlifecycle.deploy(applicationlifecycle.java:500) @ com.sun.enterprise.v3.server.applicationlifecycle.deploy(applicationlifecycle.java:219) @ org.glassfish.deployment.admin.deploycommand.execute(deploycommand.java:491) @ com.sun.enterprise.v3.admin.commandrunnerimpl$2$1.run(commandrunnerimpl.java:539) @ com.sun.enterprise.v3.admin.commandrunnerimpl$2$1.run(commandrunnerimpl.java:535) @ java.security.accesscontroller.doprivileged(native method) @ javax.security.auth.subject.doas(subject.java:360) @ com.sun.enterprise.v3.admin.commandrunnerimpl$2.execute(commandrunnerimpl.java:534) @ com.sun.enterprise.v3.admin.commandrunnerimpl$3.run(commandrunnerimpl.java:565) @ com.sun.enterprise.v3.admin.commandrunnerimpl$3.run(commandrunnerimpl.java:557) @ java.security.accesscontroller.doprivileged(native method) @ javax.security.auth.subject.doas(subject.java:360) @ com.sun.enterprise.v3.admin.commandrunnerimpl.docommand(commandrunnerimpl.java:556) @ com.sun.enterprise.v3.admin.commandrunnerimpl.docommand(commandrunnerimpl.java:1464) @ com.sun.enterprise.v3.admin.commandrunnerimpl.access$1300(commandrunnerimpl.java:109) @ com.sun.enterprise.v3.admin.commandrunnerimpl$executioncontext.execute(commandrunnerimpl.java:1846) @ com.sun.enterprise.v3.admin.commandrunnerimpl$executioncontext.execute(commandrunnerimpl.java:1722) @ com.sun.enterprise.v3.admin.adminadapter.docommand(adminadapter.java:534) @ com.sun.enterprise.v3.admin.adminadapter.onmissingresource(adminadapter.java:224) @ org.glassfish.grizzly.http.server.statichttphandlerbase.service(statichttphandlerbase.java:189) @ com.sun.enterprise.v3.services.impl.containermapper$httphandlercallable.call(containermapper.java:459) @ com.sun.enterprise.v3.services.impl.containermapper.service(containermapper.java:167) @ org.glassfish.grizzly.http.server.httphandler.runservice(httphandler.java:201) @ org.glassfish.grizzly.http.server.httphandler.dohandle(httphandler.java:175) @ org.glassfish.grizzly.http.server.httpserverfilter.handleread(httpserverfilter.java:235) @ org.glassfish.grizzly.filterchain.executorresolver$9.execute(executorresolver.java:119) @ org.glassfish.grizzly.filterchain.defaultfilterchain.executefilter(defaultfilterchain.java:284) @ org.glassfish.grizzly.filterchain.defaultfilterchain.executechainpart(defaultfilterchain.java:201) @ org.glassfish.grizzly.filterchain.defaultfilterchain.execute(defaultfilterchain.java:133) @ org.glassfish.grizzly.filterchain.defaultfilterchain.process(defaultfilterchain.java:112) @ org.glassfish.grizzly.processorexecutor.execute(processorexecutor.java:77) @ org.glassfish.grizzly.nio.transport.tcpniotransport.fireioevent(tcpniotransport.java:561) @ org.glassfish.grizzly.strategies.abstractiostrategy.fireioevent(abstractiostrategy.java:112) @ org.glassfish.grizzly.strategies.workerthreadiostrategy.run0(workerthreadiostrategy.java:117) @ org.glassfish.grizzly.strategies.workerthreadiostrategy.access$100(workerthreadiostrategy.java:56) @ org.glassfish.grizzly.strategies.workerthreadiostrategy$workerthreadrunnable.run(workerthreadiostrategy.java:137) @ org.glassfish.grizzly.threadpool.abstractthreadpool$worker.dowork(abstractthreadpool.java:565) @ org.glassfish.grizzly.threadpool.abstractthreadpool$worker.run(abstractthreadpool.java:545) @ java.lang.thread.run(thread.java:745) caused by: javax.ejb.ejbexception @ com.sun.ejb.containers.ejbcontainertransactionmanager.processsystemexception(ejbcontainertransactionmanager.java:748) @ com.sun.ejb.containers.ejbcontainertransactionmanager.completenewtx(ejbcontainertransactionmanager.java:698) @ com.sun.ejb.containers.ejbcontainertransactionmanager.postinvoketx(ejbcontainertransactionmanager.java:503) @ com.sun.ejb.containers.basecontainer.postinvoketx(basecontainer.java:4566) @ com.sun.ejb.containers.basecontainer.postinvoke(basecontainer.java:2074) @ com.sun.ejb.containers.basecontainer.postinvoke(basecontainer.java:2044) @ com.sun.ejb.containers.ejblocalobjectinvocationhandler.invoke(ejblocalobjectinvocationhandler.java:220) @ com.sun.ejb.containers.ejblocalobjectinvocationhandlerdelegate.invoke(ejblocalobjectinvocationhandlerdelegate.java:88) @ com.sun.proxy.$proxy421.persistunidirectional(unknown source) @ ejb.__ejb31_generated__employeesessionbean__intf____bean__.persistunidirectional(unknown source) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ org.jboss.weld.util.reflection.reflections.invokeandunwrap(reflections.java:414) @ org.jboss.weld.bean.proxy.enterprisebeanproxymethodhandler.invoke(enterprisebeanproxymethodhandler.java:127) @ org.jboss.weld.bean.proxy.enterprisetargetbeaninstance.invoke(enterprisetargetbeaninstance.java:56) @ org.jboss.weld.bean.proxy.injectionpointpropagatingenterprisetargetbeaninstance.invoke(injectionpointpropagatingenterprisetargetbeaninstance.java:65) @ org.jboss.weld.bean.proxy.proxymethodhandler.invoke(proxymethodhandler.java:100) @ ejb.employeesessionbean$proxy$_$$_weld$enterpriseproxy$.persistunidirectional(unknown source) @ ejb.singletonentry.test(singletonentry.java:83) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ com.sun.ejb.containers.interceptors.beancallbackinterceptor.intercept(interceptormanager.java:1035) @ com.sun.ejb.containers.interceptors.callbackchainimpl.invokenext(callbackchainimpl.java:72) @ com.sun.ejb.containers.interceptors.callbackinvocationcontext.proceed(callbackinvocationcontext.java:205) @ org.jboss.weld.ejb.abstractejbrequestscopeactivationinterceptor.aroundinvoke(abstractejbrequestscopeactivationinterceptor.java:55) @ org.jboss.weld.ejb.sessionbeaninterceptor.aroundinvoke(sessionbeaninterceptor.java:52) @ sun.reflect.generatedmethodaccessor220.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ com.sun.ejb.containers.interceptors.callbackinterceptor.intercept(interceptormanager.java:986) @ com.sun.ejb.containers.interceptors.callbackchainimpl.invokenext(callbackchainimpl.java:72) @ com.sun.ejb.containers.interceptors.callbackinvocationcontext.proceed(callbackinvocationcontext.java:205) @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.docall(systeminterceptorproxy.java:163) @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.init(systeminterceptorproxy.java:125) @ sun.reflect.generatedmethodaccessor234.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ com.sun.ejb.containers.interceptors.callbackinterceptor.intercept(interceptormanager.java:986) @ com.sun.ejb.containers.interceptors.callbackchainimpl.invokenext(callbackchainimpl.java:72) @ com.sun.ejb.containers.interceptors.interceptormanager.intercept(interceptormanager.java:412) @ com.sun.ejb.containers.interceptors.interceptormanager.intercept(interceptormanager.java:375) @ com.sun.ejb.containers.basecontainer.intercept(basecontainer.java:2014) @ com.sun.ejb.containers.abstractsingletoncontainer.createsingletonejb(abstractsingletoncontainer.java:468) ... 49 more caused by: javax.validation.constraintviolationexception: bean validation constraint(s) violated while executing automatic bean validation on callback event:'prepersist'. please refer embedded constraintviolations details. @ org.eclipse.persistence.internal.jpa.metadata.listeners.beanvalidationlistener.validateoncallbackevent(beanvalidationlistener.java:108) @ org.eclipse.persistence.internal.jpa.metadata.listeners.beanvalidationlistener.prepersist(beanvalidationlistener.java:77) @ org.eclipse.persistence.descriptors.descriptoreventmanager.notifylistener(descriptoreventmanager.java:748) @ org.eclipse.persistence.descriptors.descriptoreventmanager.notifyejb30listeners(descriptoreventmanager.java:691) @ org.eclipse.persistence.descriptors.descriptoreventmanager.executeevent(descriptoreventmanager.java:229) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.registernewobjectclone(unitofworkimpl.java:4314) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.registernotregisterednewobjectforpersist(unitofworkimpl.java:4291) @ org.eclipse.persistence.internal.sessions.repeatablewriteunitofwork.registernotregisterednewobjectforpersist(repeatablewriteunitofwork.java:521) @ org.eclipse.persistence.internal.sessions.unitofworkimpl.registernewobjectforpersist(unitofworkimpl.java:4233) @ org.eclipse.persistence.internal.jpa.entitymanagerimpl.persist(entitymanagerimpl.java:507) @ com.sun.enterprise.container.common.impl.entitymanagerwrapper.persist(entitymanagerwrapper.java:287) @ ejb.employeesessionbean.persistunidirectional(employeesessionbean.java:238) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ org.glassfish.ejb.security.application.ejbsecuritymanager.runmethod(ejbsecuritymanager.java:1081) @ org.glassfish.ejb.security.application.ejbsecuritymanager.invoke(ejbsecuritymanager.java:1153) @ com.sun.ejb.containers.basecontainer.invokebeanmethod(basecontainer.java:4786) @ com.sun.ejb.ejbinvocation.invokebeanmethod(ejbinvocation.java:656) @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:822) @ com.sun.ejb.ejbinvocation.proceed(ejbinvocation.java:608) @ org.jboss.weld.ejb.abstractejbrequestscopeactivationinterceptor.aroundinvoke(abstractejbrequestscopeactivationinterceptor.java:46) @ org.jboss.weld.ejb.sessionbeaninterceptor.aroundinvoke(sessionbeaninterceptor.java:52) @ sun.reflect.generatedmethodaccessor220.invoke(unknown source) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ com.sun.ejb.containers.interceptors.aroundinvokeinterceptor.intercept(interceptormanager.java:883) @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:822) @ com.sun.ejb.ejbinvocation.proceed(ejbinvocation.java:608) @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.docall(systeminterceptorproxy.java:163) @ com.sun.ejb.containers.interceptors.systeminterceptorproxy.aroundinvoke(systeminterceptorproxy.java:140) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:483) @ com.sun.ejb.containers.interceptors.aroundinvokeinterceptor.intercept(interceptormanager.java:883) @ com.sun.ejb.containers.interceptors.aroundinvokechainimpl.invokenext(interceptormanager.java:822) @ com.sun.ejb.containers.interceptors.interceptormanager.intercept(interceptormanager.java:369) @ com.sun.ejb.containers.basecontainer.__intercept(basecontainer.java:4758) @ com.sun.ejb.containers.basecontainer.intercept(basecontainer.java:4746) @ com.sun.ejb.containers.ejblocalobjectinvocationhandler.invoke(ejblocalobjectinvocationhandler.java:212) ... 89 more
the culprit @notnull
constraint in department
entity enforced on field rowversion
marked @version
. if annotation removed, goes fine - persist operation succeeds in entirely.
what role played @notnull
constraint in case?
the unidirectional relationship not relevant. exact same thing happens though relationship changed bidirectional one-to-many department
employee.
it looks version isn't set until entity modified, therefore rowversion
null
when entity first created. fails "not null" check. try instead , see if works:
@version @basic(optional = false) @notnull @column(name = "row_version", nullable = false) private long rowversion = 0l;
what jpa implementation using?
Comments
Post a Comment