java - Column cannot be null could not insert -
dear developers.
i'm going ask question think hard solve me because don't know basic why answer, mean?? let's see. associations in jboss documentations did not comprehensive answer: why should use jointable instead of foreign key , not understand how mappings works, mean this? know association manytomany or manytoone etc. , aims are, but how work's , collaborate each other don't need answer bi-directional or unidirectional or jointable or associations, have link can find full info 2 questions:
1) why should use jointable instead of foreign key????
2) how entity work's , collaborate each other(without explanations manytomany etc. associations , bi or unidirectional associations are)???
so, have piece of code stuck because misunderstanding, i'm trying insert data i'm mysql database: name_institution , type_name(type of institution):*
my entity class:
@entity @table(name="institution") public class institution implements serializable{ private static final long serialversionuid = -7636394097858726922l; private int id; @id @generatedvalue(strategy=identity) @column(name="id") public int getid() { return id; } public void setid(int id) { id = id; } private int version; @javax.persistence.version @column(name="version") public int getversion() { return version; } public void setversion(int version) { version = version; } private string name_institution; @column(name="name_institution") public string getname_institution() { return name_institution; } public void setname_institution(string name_institution) { name_institution = name_institution; } private type type_ininstitution; @manytoone @cascade(org.hibernate.annotations.cascadetype.all) @jointable(name="type_institution", joincolumns=@joincolumn(name="institution_id"), inversejoincolumns=@joincolumn(name="type_id")) public type gettype_ininstitution() { return type_ininstitution; } public void settype_ininstitution(type type_ininstitution) { this.type_ininstitution = type_ininstitution; }
}
my second entity class:
@entity @table(name="type") public class type implements serializable { private static final long serialversionuid = -4246217431412815552l; private string type; public type(){} public type(string type) { this.type = type; } private int type_id; @id @generatedvalue(strategy=identity) @column(name="id") public int gettype_id() { return type_id; } public void settype_id(int type_id) { type_id = type_id; } private string type_name; @column(name="type_name") public string gettype_name() { return type_name; } public void settype_name(string type_name) { type_name = type_name; } private int version; @version @column(name="version") public int getversion() { return version; } public void setversion(int version) { version = version; } private set<institution> set_institution_intype = new hashset<institution>(); @onetomany @jointable(name="type_institution", joincolumns=@joincolumn(name="type_id"), inversejoincolumns=@joincolumn(name="institution_id")) public set<institution> getset_institution_intype() { return set_institution_intype; } public void setset_institution_intype(set<institution> set_institution_intype) { this.set_institution_intype = set_institution_intype; } public void addtype(institution institution) { institution.settype_ininstitution(this); getset_institution_intype().add(institution); }
}
the dao class:
@repository("daoinsertdatainterface") @transactional public class insertdataservice implements daoinsertdatainterface{ private org.apache.commons.logging.log log= logfactory.getlog(insertdataservice.class); private sessionfactory sessionfactory; public sessionfactory getsessionfactory() { return sessionfactory; } @resource(name="sessionfactory") public void setsessionfactory(sessionfactory sessionfactory) { this.sessionfactory = sessionfactory; } @override public institution insertdata(institution institution) { sessionfactory.getcurrentsession().saveorupdate(institution); log.info(institution.getid()); return institution; }
}
my metada config:
<bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname"><value>${jdbc.driverclassname}</value></property> <property name="url"><value>${jdbc.connectionvalues}</value></property> <property name="username"><value>${jdbc.username}</value></property> <property name="password"><value>${jdbc.password}</value></property> </bean> <bean id="transactionmanager" class="org.springframework.orm.hibernate3.hibernatetransactionmanager"> <property name="sessionfactory" ref ="sessionfactory"/> </bean> <context:property-placeholder location="connection.properties"/> <tx:annotation-driven transaction-manager="transactionmanager"/> <context:component-scan base-package="edu.demidov.dom, edu.demidov.dao" /> <context:annotation-config /> <bean id="sessionfactory" class="org.springframework.orm.hibernate3.annotation.annotationsessionfactorybean"> <property name="datasource" ref ="datasource"/> <property name="packagestoscan" value="edu.demidov.dom"/> <property name="hibernateproperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.mysql5dialect</prop> <prop key="hibernate.max_fetch_depth">3</prop> <prop key="hibernate.jdbc.fetch_size">50</prop> <prop key="hibernate.jdbc.batch_size">10</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean>
and error:
info : org.springframework.beans.factory.xml.xmlbeandefinitionreader - loading xml bean definitions class path resource [app-context.xml] info : org.springframework.context.annotation.classpathbeandefinitionscanner - jsr-330 'javax.inject.named' annotation found , supported component scanning info : org.springframework.context.support.genericxmlapplicationcontext - refreshing org.springframework.context.support.genericxmlapplicationcontext@c93274: startup date [thu may 09 11:38:23 edt 2013]; root of context hierarchy info : org.springframework.beans.factory.config.propertyplaceholderconfigurer - loading properties file class path resource [connection.properties] info : org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor - jsr-330 'javax.inject.inject' annotation found , supported autowiring info : org.springframework.beans.factory.support.defaultlistablebeanfactory - pre-instantiating singletons in org.springframework.beans.factory.support.defaultlistablebeanfactory@1b9c2f0: defining beans [datasource,transactionmanager,org.springframework.beans.factory.config.propertyplaceholderconfigurer#0,org.springframework.aop.config.internalautoproxycreator,org.springframework.transaction.annotation.annotationtransactionattributesource#0,org.springframework.transaction.interceptor.transactioninterceptor#0,org.springframework.transaction.config.internaltransactionadvisor,daoinsertdatainterface,org.springframework.context.annotation.internalconfigurationannotationprocessor,org.springframework.context.annotation.internalautowiredannotationprocessor,org.springframework.context.annotation.internalrequiredannotationprocessor,org.springframework.context.annotation.internalcommonannotationprocessor,org.springframework.context.annotation.internalpersistenceannotationprocessor,sessionfactory,org.springframework.context.annotation.configurationclasspostprocessor.importawareprocessor];
root of factory hierarchy hibernate: insert type (type_name, version) values (?, ?) warn : org.hibernate.util.jdbcexceptionreporter - sql error: 1048, sqlstate: 23000 error: org.hibernate.util.jdbcexceptionreporter - column 'type_name' cannot null exception in thread "main" org.hibernate.exception.constraintviolationexception: not insert: [edu.demidov.dom.type] @ org.hibernate.exception.sqlstateconverter.convert(sqlstateconverter.java:96) @ org.hibernate.exception.jdbcexceptionhelper.convert(jdbcexceptionhelper.java:66) @ org.hibernate.id.insert.abstractreturningdelegate.performinsert(abstractreturningdelegate.java:64) @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:2327) @ org.hibernate.persister.entity.abstractentitypersister.insert(abstractentitypersister.java:2834) @ org.hibernate.action.entityidentityinsertaction.execute(entityidentityinsertaction.java:71) @ org.hibernate.engine.actionqueue.execute(actionqueue.java:273) @ org.hibernate.event.def.abstractsaveeventlistener.performsaveorreplicate(abstractsaveeventlistener.java:320) @ org.hibernate.event.def.abstractsaveeventlistener.performsave(abstractsaveeventlistener.java:203) @ org.hibernate.event.def.abstractsaveeventlistener.savewithgeneratedid(abstractsaveeventlistener.java:129) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.savewithgeneratedorrequestedid(defaultsaveorupdateeventlistener.java:210) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.entityistransient(defaultsaveorupdateeventlistener.java:195) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.performsaveorupdate(defaultsaveorupdateeventlistener.java:117) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.onsaveorupdate(defaultsaveorupdateeventlistener.java:93) @ org.hibernate.impl.sessionimpl.firesaveorupdate(sessionimpl.java:685) @ org.hibernate.impl.sessionimpl.saveorupdate(sessionimpl.java:677) @ org.hibernate.engine.cascadingaction$5.cascade(cascadingaction.java:252) @ org.hibernate.engine.cascade.cascadetoone(cascade.java:392) @ org.hibernate.engine.cascade.cascadeassociation(cascade.java:335) @ org.hibernate.engine.cascade.cascadeproperty(cascade.java:204) @ org.hibernate.engine.cascade.cascade(cascade.java:161) @ org.hibernate.event.def.abstractsaveeventlistener.cascadebeforesave(abstractsaveeventlistener.java:450) @ org.hibernate.event.def.abstractsaveeventlistener.performsaveorreplicate(abstractsaveeventlistener.java:282) @ org.hibernate.event.def.abstractsaveeventlistener.performsave(abstractsaveeventlistener.java:203) @ org.hibernate.event.def.abstractsaveeventlistener.savewithgeneratedid(abstractsaveeventlistener.java:129) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.savewithgeneratedorrequestedid(defaultsaveorupdateeventlistener.java:210) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.entityistransient(defaultsaveorupdateeventlistener.java:195) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.performsaveorupdate(defaultsaveorupdateeventlistener.java:117) @ org.hibernate.event.def.defaultsaveorupdateeventlistener.onsaveorupdate(defaultsaveorupdateeventlistener.java:93) @ org.hibernate.impl.sessionimpl.firesaveorupdate(sessionimpl.java:685) @ org.hibernate.impl.sessionimpl.saveorupdate(sessionimpl.java:677) @ org.hibernate.impl.sessionimpl.saveorupdate(sessionimpl.java:673) @ edu.demidov.dao.insertdataservice.insertdata(insertdataservice.java:32) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:601) @ org.springframework.aop.support.aoputils.invokejoinpointusingreflection(aoputils.java:317) @ org.springframework.aop.framework.reflectivemethodinvocation.invokejoinpoint(reflectivemethodinvocation.java:183) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:150) @ org.springframework.transaction.interceptor.transactioninterceptor$1.proceedwithinvocation(transactioninterceptor.java:96) @ org.springframework.transaction.interceptor.transactionaspectsupport.invokewithintransaction(transactionaspectsupport.java:260) @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:94) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172) @ org.springframework.aop.framework.jdkdynamicaopproxy.invoke(jdkdynamicaopproxy.java:204) @ $proxy22.insertdata(unknown source) @ edu.demidov.dao.apptest.main(apptest.java:22) caused by: com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityconstraintviolationexception: column 'type_name' cannot null @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method) @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:57) @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45) @ java.lang.reflect.constructor.newinstance(constructor.java:525) @ com.mysql.jdbc.util.handlenewinstance(util.java:411) @ com.mysql.jdbc.util.getinstance(util.java:386) @ com.mysql.jdbc.sqlerror.createsqlexception(sqlerror.java:1041) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4120) @ com.mysql.jdbc.mysqlio.checkerrorpacket(mysqlio.java:4052) @ com.mysql.jdbc.mysqlio.sendcommand(mysqlio.java:2503) @ com.mysql.jdbc.mysqlio.sqlquerydirect(mysqlio.java:2664) @ com.mysql.jdbc.connectionimpl.execsql(connectionimpl.java:2815) @ com.mysql.jdbc.preparedstatement.executeinternal(preparedstatement.java:2155) @ com.mysql.jdbc.preparedstatement.executeupdate(preparedstatement.java:2458) @ com.mysql.jdbc.preparedstatement.executeupdate(preparedstatement.java:2375) @ com.mysql.jdbc.preparedstatement.executeupdate(preparedstatement.java:2359) @ org.hibernate.id.identitygenerator$getgeneratedkeysdelegate.executeandextract(identitygenerator.java:94) @ org.hibernate.id.insert.abstractreturningdelegate.performinsert(abstractreturningdelegate.java:57) ... 44 more ss
thank you, guys.
why should use jointable insted of foreign key?
you should not. have choice. if prefer using join table, use join table. if prefer using join column (foreign key in child table), use join column. if have existing schema can't change, choose option corresponds existing schema.
how entity work's , collaborate each other
i'm not sure mean that. if entity school has onetomany association entity teacher, when school session, , ask teachers, hibernate load them database you. if add teacher collection of teachers of school, hibernate populate join column or join table you. goal manipulate objects if theyr simple objects stored in memory, , have hibernate load , save them from/to database.
now regarding exception , title of question, exception message says clearly:
insert type (type_name, version) values (?, ?) warn : org.hibernate.util.jdbcexceptionreporter - sql error: 1048, sqlstate: 23000 error: org.hibernate.util.jdbcexceptionreporter - column 'type_name' cannot null
you're trying insert antity of type type (what badly chosen name!) null name. , database column doesn't acept null. exception. either change table definition if null valid type name, or fix code make sure don't try insert null name.
also, respect java naming conventions. code hard read.
Comments
Post a Comment