2016-12-31 55 views
1

我下面這個教程來測試實現它到我的項目之前休眠:http://blog.netgloo.com/2014/10/27/using-mysql-in-spring-boot-via-spring-data-jpa-and-hibernate/從擴展CrudRepository <Class,ID>的接口創建一個bean?

我的問題是,該指令要求的UserDAO是一個bean:

@Autowired 
private UserDao userDao; 

它是不是... ?我覺得我錯過了這個網站提供的例子中非常重要的一些東西。我習慣於使用implements Serializable來實現bean,但在此場景中不使用它。它應該如何被視爲一個bean?

如果有人能向我解釋我缺少什麼,我將非常感激。這種實現CRUD的方式,更多的只使用接口和標準方式來聲明函數看起來非常有吸引力。謝謝!

編輯:下面是我的代碼。當我嘗試將它集成到我的項目中時,由於項目體系結構的差異(這是我的猜測),隨本教程提供的代碼不起作用。

架構:http://imgur.com/a/2xsI4

Application.java

@SpringBootApplication 
@ComponentScan("boot") 
@ComponentScan("dao") 
@ComponentScan("modele") 
@EnableJpaRepositories("org.utc.ai15") 
public class Application { 

    public static void main (String[] args){ 
     SpringApplication.run(Application.class, args); 
    } 

} 

TestDAO.java

@Transactional 
@Component 
public interface TestDAO extends CrudRepository<Test, Long > { 

    /** 
    * This method will find an User instance in the database by its email. 
    * Note that this method is not implemented and its working code will be 
    * automagically generated from its signature by Spring Data JPA. 
    */ 
    public Test findByEmail(String email); 

} 

我認爲這是參與這個問題的一切。

我試圖添加@ComponentTestDAO.java因此它與@ComponentScan("dao")掃描,但它不工作。

這裏的錯誤:

Field testDao in boot.controller.TestController required a bean of type 'dao.TestDAO' that could not be found.

編輯2:錯誤是@EnableJpaRepositories("org.utc.ai15"),準確的申報是@EnableJpaRepositories("dao")(CF @Alex答案)。

+0

userDao是一個「存儲庫」bean。也許你應該閱讀Spring Data JPA文檔? https://docs.spring.io/spring-data/jpa/docs/current/reference/html。 – alexbt

+0

你的教程提到了這一點:「使用Spring Data JPA,你的實體的DAO只需通過擴展Sp​​ring提供的CrudRepository接口來創建」。簡而言之,Spring Data只需創建一個接口即可爲您提供即用型存儲庫。然後你可以注入它作爲一個bean並使用保存/刪除/查找方法... – alexbt

+0

感謝您的答覆。我更瞭解發生了什麼事情。但是我仍然無法創建UserDAO的bean。它只是不被認爲是一個bean。我已使用@EnableJpaRepositories進行了註釋,隨後的教程與文檔中定義的步驟相同。你有什麼想法可能會出錯?我明天會發布我的代碼示例,但它的UserDAO是相同的。 – Chuck

回答

1

這很可能是由於bean發現/包掃描。

檢查以下內容:

  • 要麼確保您的UserDAO是SpringBootApplication以下(春季啓動使用的主類爲根,以掃描豆)
  • 或者你@EnableJpaRepositories(basePackages="org.my.pkg")
  • 定義的庫包
  • 或者您添加@ScanPackages來爲bean發現定義額外的包(不僅僅是存儲庫)。

通過,我的意思是你在類的頂部。