2014-09-06 46 views
-1

我使用的是Spring 3.2和Hibernate,但是我發現它不允許從XML文件創建SessionFacotry bean,我不知道爲什麼會出現這個錯誤。我有搜索很多,但沒有找到優秀答案請幫助相同。錯誤創建名爲'bookMasterController'的Bean的錯誤:注入自動裝配的依賴關係失敗;

這裏我的文件是XML

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:lang="http://www.springframework.org/schema/lang" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd 
     http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"> 

    <!-- For context suppport of the Controller --> 

    <context:annotation-config></context:annotation-config> 
    <context:component-scan base-package="com.book.controller"></context:component-scan> 


    <!-- For enable the MVC Support --> 
    <!-- <mvc:annotation-driven /> 
    <mvc:resources mapping="/resources/**" location="/WEB-INF/resources/"></mvc:resources> 
--> 
    <!-- Enabling the suppot the UI user side --> 
    <bean id="jspViewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/view/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 




    <!-- For messages for the Labels --> 

    <bean id="messageSource" 
     class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="classpath:messages" /> 
     <property name="defaultEncoding" value="UTF-8" /> 
    </bean> 


    <!-- For the Properties of JDBC --> 
    <bean id="propertyConfigurer" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
     p:location="/WEB-INF/jdbc.properties" /> 

    <!--Database Properties --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
     destroy-method="close" p:driverClassName="${jdbc.driverClassName}" 
     p:url="${jdbc.databaseurl}" p:username="${jdbc.username}" p:password="${jdbc.password}" /> 

    <!-- Session facotry configration --> 
    <bean id="hibernate4AnnotatedSessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <!-- <property name="configLocation"> 
      <value>classpath:hibernate.cfg.xml</value> 
     </property> --> 
     <property name="packagesToScan" value="com.book.bookentity" /> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${jdbc.dialect}</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 

    <!-- implementation bean config. --> 

    <bean id="autherMasterServiceInterfacecontroller" class="com.book.service.AutherMasterServiceInterfaceImpl"></bean> 
    <bean id="bookMasterServiceInterfacecontroller" class="com.book.service.BookMasterServiceInterfaceImpl"></bean> 
    <bean id="emailMasterInterfacecontroller" class="com.book.service.EmailMasterInterfaceImpl"></bean> 
    <bean id="languageMasterinterfacecontroller" class="com.book.service.LanguageMasterinterfaceimpl"></bean> 




    <bean id="bookMasterInterface" class="com.book.bookDao.BookMasterInterfaceImpl"> 
     <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" /> 
    </bean> 
    <bean id="emailMasterInterface" class="com.book.bookDao.EmailMasterInterfaceImpl"> 
     <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" /> 
    </bean> 
    <bean id="languageMasterInterface" class="com.book.bookDao.LanguageMasterInterfaceImpl"> 
     <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" /> 
    </bean> 
    <bean id="autherMasterInterface" class="com.book.bookDao.AutherMasterInterfaceImpl"> 
     <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" /> 
    </bean> 



    <!-- Enabling transction managar --> 
    <tx:annotation-driven transaction-manager="transactionManager" /> 


    <!-- Config Tranaction Managar --> 
    <bean id="transactionManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" /> 
    </bean> 


</beans> 

豆class1的

@Entity 
@Table(name = "tbl_bookmaster", uniqueConstraints = { @UniqueConstraint(columnNames = "bid") }) 
public class BookMasterTable { 

    @Id 
    @GeneratedValue 
    @Column(name = "bid") 
    private int bookid; 

    @Column(name = "bookname") 
    private String bookname; 

    @Column(name = "booktype") 
    private String booktype; 

    @Column(name = "bookprice") 
    private String bookprice; 

    @Column(name = "bestsaler") 
    private int bestsaller; 

    @ManyToOne 
    @JoinColumn(name = "lid") 
    private LanguageMasterTable languageMasterTable; 

    @ManyToOne 
    @JoinColumn(name = "auid") 
    private AutherMasterTable autherMasterTable; 

    @ManyToOne 
    @JoinColumn(name = "mailid") 
    private EmailMasterTable emailMasterTable; 


    // getter and setter 

    } 

bean2

@Entity 
@Table(name = "tbl_contactmaster") 
public class EmailMasterTable implements Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @OneToMany 
    @JoinColumn(name = "authercontactmail") 
    private Set<BookMasterTable> bookMasterTables; 

    @Column(name = "emailcontact") 
    private String emailcontact; 

} 

豆3

@Entity 
@Table(name = "tbl_authermaster") 
public class AutherMasterTable { 

    @Id 
    @GeneratedValue 
    @OneToMany 
    @JoinColumn(name = "auid") 
    private Set<BookMasterTable> bookMasterTables; 

    @Column(name = "authername") 
    private String authername; 
    // getter and setter 
} 

豆4

public class LanguageMasterTable { 

    @Id 
    @GeneratedValue 
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    @JoinColumn(name = "language") 
    private Set<BookMasterTable> bookMasterTables; 

    @Column(name = "languagename") 
    private String languagename; 

    // getter and setter 
} 

控制器豆

@Controller 
public class BookMasterController { 

    @Autowired 
    private BookMasterServiceInterface bookMasterServiceInterfacecontroller; 


    @RequestMapping(value="/addbook",method= RequestMethod.POST) 
    public String addAuther(@ModelAttribute("book") BookMasterTable bookMasterTable){ 

     bookMasterServiceInterfacecontroller.addBook(bookMasterTable); 
     return "bookadded"; 
    } 
} 

像對於每個bean類

服務接口

public interface BookMasterServiceInterface { 
    public void addBook(BookMasterTable bookMasterTable); 
} 

服務CALSS

具有所有控制器

像所有的bean

庫類接口,具有服務

public interface BookMasterInterface { 
    public void addBooks(BookMasterTable bookMasterTable); 
} 

庫類的實現具有每個bean

@Repository 
public class BookMasterInterfaceImpl implements BookMasterInterface { 
    @Autowired 
    private SessionFactory sessionFactory; 

    @Override 
    public void addBooks(BookMasterTable bookMasterTable) { 
     // TODO Auto-generated method stub 

     try { 
      sessionFactory.getCurrentSession().save(bookMasterTable); 
     } catch (Exception e) { 
      // TODO: handle exception 
      e.printStackTrace(); 
     } 
    } 

} 

,我得到什麼錯誤。

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.book.service.BookMasterServiceInterface com.book.controller.BookMasterController.bookMasterServiceInterfacecontroller; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookMasterServiceInterfacecontroller': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.book.bookDao.BookMasterInterface com.book.service.BookMasterServiceInterfaceImpl.bookMasterInterface; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'bookMasterInterface': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.book.bookDao.BookMasterInterfaceImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/BookServletmvc-servlet.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:517) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) 
    ... 20 more 

主這是不允許創建,因爲它得到空指針,但我不知道在這裏。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/BookServletmvc-servlet.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1512) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:912) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:855) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:770) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:489) 
    ... 48 more 
Caused by: java.lang.NullPointerException 
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:538) 
    at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:126) 
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116) 
    at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1514) 
    at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1437) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1355) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:247) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:373) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:358) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509) 
    ... 58 more 

,我會很高興,如果u能幫助:)

我有四個實體。第一個是

@Entity 
@Table(name = "tbl_bookmaster", uniqueConstraints = { @UniqueConstraint(columnNames = "bid") }) 
public class BookMasterTable { 

    @Id 
    @GeneratedValue 
    @Column(name = "bid") 
    private int bookid; 

    @Column(name = "bookname") 
    private String bookname; 

    @Column(name = "booktype") 
    private String booktype; 

    @Column(name = "bookprice") 
    private String bookprice; 

    @Column(name = "bestsaler") 
    private int bestsaller; 

    @ManyToOne 
    @JoinColumn(name = "lid") 
    private LanguageMasterTable languageMasterTable; 

    @ManyToOne 
    @JoinColumn(name = "auid") 
    private AutherMasterTable autherMasterTable; 

    @ManyToOne 
    @JoinColumn(name = "mailid") 
    private EmailMasterTable emailMasterTable; 

    public int getBookid() { 
     return bookid; 
    } 

    public void setBookid(int bookid) { 
     this.bookid = bookid; 
    } 

    public String getBookname() { 
     return bookname; 
    } 

    public void setBookname(String bookname) { 
     this.bookname = bookname; 
    } 

    public String getBooktype() { 
     return booktype; 
    } 

    public void setBooktype(String booktype) { 
     this.booktype = booktype; 
    } 

    public String getBookprice() { 
     return bookprice; 
    } 

    public void setBookprice(String bookprice) { 
     this.bookprice = bookprice; 
    } 

    public int getBestsaller() { 
     return bestsaller; 
    } 

    public void setBestsaller(int bestsaller) { 
     this.bestsaller = bestsaller; 
    } 

    public LanguageMasterTable getLanguageMasterTable() { 
     return languageMasterTable; 
    } 

    public void setLanguageMasterTable(LanguageMasterTable languageMasterTable) { 
     this.languageMasterTable = languageMasterTable; 
    } 

    public AutherMasterTable getAutherMasterTable() { 
     return autherMasterTable; 
    } 

    public void setAutherMasterTable(AutherMasterTable autherMasterTable) { 
     this.autherMasterTable = autherMasterTable; 
    } 

    public EmailMasterTable getEmailMasterTable() { 
     return emailMasterTable; 
    } 

    public void setEmailMasterTable(EmailMasterTable emailMasterTable) { 
     this.emailMasterTable = emailMasterTable; 
    } 

} 
+0

發佈您的實體 – 2014-09-06 10:01:56

+0

實體不是問題我仍然在發佈它。我有三個實體。 – 2014-09-06 10:02:29

+0

你在其他地方有問題,你發佈的內容是無關緊要的。 – 2014-09-06 11:47:46

回答

0

我認爲這個問題是在這裏,在AutherMasterTable(和其他實體類似的地方):

@Id 
@GeneratedValue 
@OneToMany 
@JoinColumn(name = "auid") 
private Set<BookMasterTable> bookMasterTables; 

對於一個一對多的加入,在JoinColumn annotation提到的連接列在其他表。它不涉及本表中的一列。此外,Set不能是標識符。

嘗試使用兩個字段代替:

@Id 
@GeneratedValue 
@Column(name = "auid") 
private int autherId; 

@OneToMany 
@JoinColumn(name = "auid") 
private Set<BookMasterTable> bookMasterTables; 

注意,我們不是在同一個表定義兩次相同的列:上述的auid第一提及指的是列在tbl_authermaster和第二一指auid專欄tbl_bookmaster

儘管你的錯誤,Hibernate不應該拋出一個NullPointerException在你身上。這是Hibernate中的一個錯誤。

+0

讓我試試。 – 2014-09-08 08:27:08

+0

我現在得到這個錯誤引起:org.hibernate.HibernateException:當'hibernate.dialect'未設置時連接不能爲空 – 2014-09-08 08:45:11

+0

是它的真實和我已經解決的其他事情。 – 2014-09-08 09:49:26

0

閱讀堆棧跟蹤,你知道在哪裏:

java.lang.NullPointerException 
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:538) 
    at ... 

你應該在調試與在該行斷點運行,但我認爲這基本上意味着你有一個錯誤您的實體,您的映射或它所運行的數據庫上。如果可以的話,你應該用Hibernate生成模式,然後你應該比較你的目標模式和生成的schema =>之間的差異,它會打印映射錯誤。

您的OneToMany和ManyToOne上也沒有mappedBy。你應該首先檢查(不是沒有錯誤,但如果數據庫模式與Hibernate預期模式不同步,它可能會成爲問題)。

相關問題