You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

hibernate-tools-maven-plugin 5.6.2.Final忽略reveng.xml扫描全库问题

问题

使用hibernate-tools-maven-plugin 5.6.2.Final的hbm2java目标,希望仅为Oracle数据库dsli01 schema下的UAC_USER_SSN表生成Java类,但插件似乎忽略了src/main/resources目录下的reveng.xml配置,扫描了数据库中所有schema的所有表。相关配置文件及执行日志如下:

reveng.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering 
     SYSTEM "https://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd" >

<hibernate-reverse-engineering>
  <!-- This assumes your database connection is pointing to the proper catalog -->
  <!-- To get all tables in the named schema, use the following 
       <schema-selection match-schema="PM" />
  -->
  <!--  to get only the named tables -->
  <!--  <schema-selection match-schema="dsli01" match-table="UAC_USER_SSN"/>-->
  <table-filter match-schema="dsli01" match-name="UAC_USER_SSN" />
   
</hibernate-reverse-engineering>

hibernate.properties配置

hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
#hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.url=jdbc:oracle:thin:@10.9.xx.xxx:25100:dsli01.xxxxx.com
hibernate.connection.username=dsli01
hibernate.connection.password=xxxxx

pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Test</groupId>
  <artifactId>Hibernate_Reveng_Maven</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Hibernate Reveng Gen Java</name>
  
  <properties>
      <project.basedir>C:/Kei/SLIS_git_eclipse_2023_09_20231115_2/Hibernate_Reveng (Not work) </project.basedir>
    <h2.version>1.4.200</h2.version>   
    
  </properties>
  
  <build>
      <plugins>
        <plugin>           
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-tools-maven-plugin</artifactId>
            <version>5.6.2.Final</version>      
            <executions>
                  <execution>
                    <id>entity-generation</id>
                    <phase>none</phase>
                    <goals>
                      <goal>hbm2java</goal>
                    </goals>                    
                  </execution>                
        </executions> 
        <configuration>
              <ejb3>true</ejb3>
              <revengFile>src/main/resources/reveng.xml</revengFile>
              <outputDirectory>src/main/java</outputDirectory>
        </configuration>  
        <dependencies>          
            <dependency>
                <groupId>com.oracle.database.jdbc</groupId>
                <artifactId>ojdbc8</artifactId>
                <version>12.2.0.1</version>
            </dependency>
        </dependencies>     
      </plugin>      
      </plugins>
    </build>
    
    <dependencies>  
        <dependency>    
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-tools-maven-plugin</artifactId>
            <version>5.6.2.Final</version>
        </dependency>
            <!-- https://mvnrepository.com/artifact/com.oracle/ojdbc14 -->
         <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency>
    </dependencies>
</project>

执行日志(部分)

[INFO] Scanning for projects...
[INFO] 
[INFO] [1m--------------------< [0;36mTest:Hibernate_Reveng_Maven[0;1m >---------------------[m
[INFO] [1mBuilding Hibernate Reveng Gen Java 0.0.1-SNAPSHOT[m
[INFO]   from pom.xml
[INFO] [1m--------------------------------[ jar ]---------------------------------[m
[INFO] 
[INFO] [1m--- [0;32mhibernate-tools:5.6.2.Final:hbm2java[m [1m(default-cli)[m @ [36mHibernate_Reveng_Maven[0;1m ---[m
[INFO] Starting Hbm2JavaMojo...
Mar 07, 2024 11:55:59 AM org.hibernate.cfg.reveng.OverrideRepository addFile
INFO: Override file: C:\Kei\SLIS_git_eclipse_2023_09_20231115_2\Hibernate_Reveng (Not work)\src\main\resources\reveng.xml
Mar 07, 2024 11:56:01 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 5.6.1.Final
[INFO] Starting POJO export to directory: C:\Kei\SLIS_git_eclipse_2023_09_20231115_2\Hibernate_Reveng (Not work)\src\main\java...
Mar 07, 2024 11:56:01 AM org.hibernate.tool.Version <clinit>
INFO: Hibernate Tools 5.6.2.Final
Mar 07, 2024 11:56:01 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
Mar 07, 2024 11:56:01 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Mar 07, 2024 11:56:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [oracle.jdbc.driver.OracleDriver] at URL [jdbc:oracle:thin:@10.9.200.58:25100:dsli01.unifysoft.com]
Mar 07, 2024 11:56:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=dsli01}
Mar 07, 2024 11:56:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Mar 07, 2024 11:56:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Mar 07, 2024 11:56:07 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
Mar 07, 2024 11:56:09 AM org.hibernate.resource.beans.spi.ManagedBeanRegistryInitiator resolveBeanContainer
INFO: HHH10005002: No explicit CDI BeanManager reference was passed to Hibernate, but CDI is available on the Hibernate ClassLoader.
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
INFO: {TABLE_CAT=null, TABLE_NAME=IND$, TABLE_SCHEM=SYS, TABLE_TYPE=TABLE, REMARKS=null}
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
INFO: {TABLE_CAT=null, TABLE_NAME=CLU$, TABLE_SCHEM=SYS, TABLE_TYPE=TABLE, REMARKS=null}
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
INFO: {TABLE_CAT=null, TABLE_NAME=ICOL$, TABLE_SCHEM=SYS, TABLE_TYPE=TABLE, REMARKS=null}
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
INFO: {TABLE_CAT=null, TABLE_NAME=COL$, TABLE_SCHEM=SYS, TABLE_TYPE=TABLE, REMARKS=null}
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
INFO: {TABLE_CAT=null, TABLE_NAME=TAB$, TABLE_SCHEM=SYS, TABLE_TYPE=TABLE, REMARKS=null}
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
INFO: {TABLE_CAT=null, TABLE_NAME=LOB$, TABLE_SCHEM=SYS, TABLE_TYPE=TABLE, REMARKS=null}
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
INFO: {TABLE_CAT=null, TABLE_NAME=COLTYPE$, TABLE_SCHEM=SYS, TABLE_TYPE=TABLE, REMARKS=null}
Mar 07, 2024 11:56:10 AM org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect$1 convertRow
原因及解决方案

核心原因

  1. table-filter的逻辑局限:table-filter是在默认扫描结果上做过滤,而非限制扫描范围。Hibernate逆向工程默认会扫描当前用户有权限访问的所有schema和表,即便最终只生成匹配table-filter的实体类,扫描过程依然会遍历所有可见表。
  2. Oracle用户权限问题:当前dsli01用户拥有访问SYS等系统schema的权限,导致插件扫描时会遍历这些系统schema下的表。

正确配置方式

要限制仅扫描指定schema和表,需使用**schema-selection**明确指定扫描范围,修改reveng.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering 
     SYSTEM "https://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd" >

<hibernate-reverse-engineering>
    <!-- 仅扫描dsli01 schema -->
    <schema-selection match-schema="dsli01"/>
    <!-- 仅保留该schema下的UAC_USER_SSN表 -->
    <table-filter match-name="UAC_USER_SSN"/>
</hibernate-reverse-engineering>

也可以直接在schema-selection中同时指定schema和表:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering 
     SYSTEM "https://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd" >

<hibernate-reverse-engineering>
    <schema-selection match-schema="dsli01" match-table="UAC_USER_SSN"/>
</hibernate-reverse-engineering>

额外优化建议

  1. 权限回收:如果不需要访问系统schema,联系DBA回收dsli01用户对SYS等系统schema的访问权限,从根源减少扫描范围。
  2. 配置确认:日志已显示Override file: .../reveng.xml,说明配置文件已被正确加载,无需调整pom.xml中的路径配置。

内容的提问来源于stack exchange,提问作者user1169587

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:15:54