2013-05-09 14 views
5

प्रिय डेवलपर।कॉलम शून्य नहीं हो सकता

मैं आपको एक प्रश्न पूछने जा रहा हूं जो मुझे लगता है कि मेरे लिए हल करना मुश्किल है क्योंकि मुझे जवाब क्यों नहीं है, मेरा क्या मतलब है ?? चलो देखते हैं। जेबॉस दस्तावेज में एसोसिएशन को व्यापक उत्तर नहीं मिला: मुझे विदेशी कुंजी की बजाय जॉइनटेबल का उपयोग क्यों करना चाहिए और मैं पूरी तरह से समझ नहीं पा रहा हूं कि मैपिंग कैसे काम करती है, इसका मेरा क्या अर्थ है? मुझे पता है कि एसोसिएशन क्या है कई टोमनी या मनीटोन इत्यादि। और किस उद्देश्य के लिए वे हैं, लेकिन वे एक दूसरे के साथ कैसे काम करते हैं और सहयोग करते हैं को द्वि-दिशात्मक या यूनिडायरेक्शनल या जॉइनटेबल या एसोसिएशन के बारे में कोई जवाब नहीं चाहिए, मैं चाहूंगा लिंक है जहां मुझे अपने दो प्रश्नों के बारे में पूरी जानकारी मिल सकती है:

1) मुझे विदेशी कुंजी की बजाय जॉइनटेबल का उपयोग क्यों करना चाहिए ????

2) इकाई कैसे काम करती है और एक-दूसरे के साथ सहयोग करती है (स्पष्टीकरण के बिना कई टोनी आदि संगठनों और द्विपक्षीय संघीय संघ हैं) ??? Name_INSTITUTION और TYPE_NAME (संस्था का प्रकार):: *

  • मेरे इकाई

    तो, मैं कोड का टुकड़ा है, जहां मैं क्योंकि गलतफहमी अटक है, मैं सिर्फ डेटा डालने के लिए मैं MySQL डाटाबेस हूँ कोशिश कर रहा हूँ वर्ग:

    @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", 
                [email protected](name="INSTITUTION_ID"), 
                [email protected](name="TYPE_ID")) 
        public Type getType_inInstitution() { 
         return type_inInstitution; 
        } 
        public void setType_inInstitution(Type type_inInstitution) { 
         this.type_inInstitution = type_inInstitution; 
        } 
    

    }

  • मेरी दूसरी इकाई वर्ग:

    @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",          [email protected](name="TYPE_ID"),           [email protected](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); 
    
        } 
    

    }

    डीएओ कक्षा:

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

    }

  • मेरे 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> 
    

  • ,210
  • और त्रुटि:

INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [app-context.xml] INFO : org.springframework.context.annotation.ClassPathBeanDefinitionScanner - JSR-330 'javax.inject.Named' annotation found and supported for component scanning INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing o[email protected]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 from class path resource [connection.properties] INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]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 into TYPE (TYPE_NAME, VERSION) values (?, ?) WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: 1048, SQLState: 23000 ERROR: org.hibernate.util.JDBCExceptionReporter - Column 'TYPE_NAME' cannot be null Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not insert: [edu.demidov.dom.Type] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2327) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2834) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677) at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:252) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:392) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:335) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:204) at org.hibernate.engine.Cascade.cascade(Cascade.java:161) at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:450) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:282) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673) at edu.demidov.dao.InsertDataService.insertData(InsertDataService.java:32) 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.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy22.insertData(Unknown Source) at edu.demidov.dao.AppTEst.main(AppTEst.java:22) Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'TYPE_NAME' cannot be null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1041) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4120) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4052) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2503) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2664) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2375) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2359) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94) at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57) ... 44 more SS

धन्यवाद, दोस्तों।

+0

+1। – Jops

उत्तर

2

Why I should use JoinTable insted of Foreign Key?

आपको नहीं करना चाहिए। तुम्हे जो पसंद है। यदि आप एक जॉइन टेबल का उपयोग करना पसंद करते हैं, तो एक जॉइन टेबल का उपयोग करें। यदि आप एक कॉलम कॉलम (बाल तालिका में विदेशी कुंजी) का उपयोग करना पसंद करते हैं, तो एक कॉलम कॉलम का उपयोग करें। यदि आपके पास पहले से मौजूद स्कीमा है जिसे आप नहीं बदल सकते हैं, तो मौजूदा स्कीमा से संबंधित विकल्प चुनें।

how entity work's and collaborate with each other

मुझे यकीन नहीं है कि इसका मतलब क्या है।यदि किसी इकाई स्कूल में एक इकाई शिक्षक के साथ एक वन्यमनी एसोसिएशन है, जब आप सत्र से स्कूल प्राप्त करते हैं, और अपने शिक्षकों से पूछते हैं, तो हाइबरनेट उन्हें आपके लिए डेटाबेस से लोड करेगा। यदि आप किसी स्कूल के शिक्षकों के संग्रह में शिक्षक जोड़ते हैं, तो हाइबरनेट आपके लिए कॉलम कॉलम या जॉइन टेबल को पॉप्युलेट करेगा। लक्ष्य केवल ऑब्जेक्ट्स में हेरफेर करने के लिए है जैसे कि वे स्मृति में संग्रहीत साधारण वस्तुएं थीं, और हाइबरनेट लोड करें और उन्हें आपके लिए डेटाबेस से/सहेजें।

अब अपवाद और अपने प्रश्न के शीर्षक के बारे में, अपवाद संदेश यह स्पष्ट रूप से कहते हैं:

insert into TYPE (TYPE_NAME, VERSION) values (?, ?) WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: 1048, SQLState: 23000 ERROR: org.hibernate.util.JDBCExceptionReporter - Column 'TYPE_NAME' cannot be null

आप एक साथ के प्रकार प्रकार एक antity (क्या एक बुरी तरह से चुना नाम!) सम्मिलित करने के लिए कोशिश कर रहे हैं शून्य नाम और डेटाबेस कॉलम शून्य स्वीकार नहीं करता है। तो आपको यह अपवाद मिलता है। या तो तालिका परिभाषा को बदलें यदि शून्य एक मान्य प्रकार का नाम है, या यह सुनिश्चित करने के लिए अपना कोड ठीक करें कि आप एक शून्य नाम डालने का प्रयास नहीं करते हैं।

इसके अलावा, जावा नामकरण सम्मेलनों का सम्मान करें। आपका कोड पढ़ने के लिए वास्तव में मुश्किल है। अत्यधिक विस्तृत प्रश्न के लिए

+1

क्या होगा यदि मेरे पास एक ऑब्जेक्ट या ऑब्जेक्ट्स के बीच बहुत से सहयोग हैं ?? उदाहरण के लिए: इंस्टीट्यूशन (ManyToOne) <-> प्रकार (OneToMany), प्रकार (ManyToMany) <-> DateOfInstitution (ManyToMany) संस्थान (OneToMany) <-> श्रमिक, संस्थानों (ManyToMany) <-> DateOfInstitution (ManyToMany), DataOfInstitution (OneToMany) <-> श्रमिक अगर हम एक बहुत कुछ है की की मालिकों। तो अगर मैं इंस्टीट्यूशन + टाइप + वर्कर्स + डेट जैसी सभी ऑब्जेक्ट्स का डेटा डालता हूं ?? और आखिरकार मुझे डेटऑफ इंस्टीट्यूशन + टाइप या डेटऑफ इंस्टीट्यूशन + इंस्टीट्यूशन के साथ संबंधित निकालना है ??? यहां मेरा सवाल था: ** इकाई कैसे काम करती है और एक-दूसरे के साथ सहयोग करती है **? – Alexandrovich

+0

यह प्रश्न उत्तर देने के लिए बहुत अस्पष्ट है। प्रत्येक संघ अन्य सभी के रूप में काम करता है। एक एसोसिएशन एक आकस्मिकता है। तथ्य यह है कि कई मौजूद हैं, वे कुछ भी नहीं बदलते हैं कि वे कैसे काम करते हैं। एक ठोस सवाल पूछें, या दस्तावेज़ीकरण पढ़ें। –

+0

धन्यवाद आपके उत्तर के लिए महोदय। और मुझे अपने बुरे शिष्टाचार के लिए लोगों को परेशान करने के लिए बहुत खेद है। – Alexandrovich

संबंधित मुद्दे