首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 整合 Hibernate:使用 packagesToScan 簡化實體掃描配置

     編輯:Java 相關知識

Spring + Hibernate 配置優化:從 annotatedClasses 到 packagesToScan

傳統 Spring 整合 Hibernate 時,需在 LocalSessionFactoryBean 中逐一列出 annotatedClasses,隨著實體類別增加,維護成本極高。Spring 3.1+ 提供 packagesToScan 屬性,自動掃描指定套件下的 @Entity 類別,大幅簡化 XML 配置。

傳統寫法(繁瑣、易出錯)

<property name="annotatedClasses">
    <list>
        <value>com.games.snake.po.game.LvConfigPo</value>
        <value>com.games.snake.po.game.BuffPo</value>
        <value>com.games.snake.po.game.AwardPo</value>
        <!-- 更多實體... -->
    </list>
</property>

簡化寫法(單一套件)

<property name="packagesToScan" value="cn.o.czcqw.publics.entity" />

多套件掃描(List 形式)

<property name="packagesToScan">
    <list>
        <value>cn.o.czcqw.publics.entity</value>
        <value>cn.o.czcqw.party.entity</value>
        <value>cn.o.czcqw.society.entity</value>
    </list>
</property>

運作原理

  1. Spring 容器啟動時,LocalSessionFactoryBean 讀取 packagesToScan。
  2. 使用 ClassPathScanningCandidateComponentProvider 掃描指定套件及子套件。
  3. 尋找標註 @Entity、@MappedSuperclass、@Embeddable 的類別。
  4. 自動註冊為 Hibernate 映射類別,無需手工維護清單。

注意事項與最佳實務

  • 套件命名規範:建議將所有實體集中在固定根套件下(如 com.xxx.domain),避免掃描過多無關類別影響啟動速度。
  • 排除特定類別:可搭配 excludeFilters 排除不需映射的類別。
  • 多模組專案:各模組各自配置 packagesToScan 指向自己的實體套件,避免跨模組掃描。
  • 相容性:Spring 3.1+、Hibernate 4+ 完整支援;舊版本需升級。

Java Config 寫法(無 XML)

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sf = new LocalSessionFactoryBean();
    sf.setDataSource(dataSource());
    sf.setPackagesToScan("cn.o.czcqw.publics.entity", "cn.o.czcqw.party.entity");
    sf.setHibernateProperties(hibernateProperties());
    return sf;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved