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

代码编译报错:nativeEntityManagerFactory私有访问权限问题求助

编译错误解决:Spring 5.3.27中nativeEntityManagerFactory私有访问问题

环境信息

  • JDK 8
  • Tomcat 9
  • Spring 5.3.27
  • 当前Hibernate依赖:
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.1.4.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search</artifactId>
    <version>3.4.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.2.3.Final</version>
    <exclusions>
        <exclusion>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
        </exclusion>
        <exclusion>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.2.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>4.1.0.Final</version>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

问题详情

代码无法编译,错误集中在nativeEntityManagerFactory字段,涉及代码行:

this.nativeEntityManagerFactory = provider.createContainerEntityManagerFactory(this.persistenceUnitInfo, getJpaPropertyMap());
postProcessEntityManagerFactory(this.nativeEntityManagerFactory, this.persistenceUnitInfo);

return this.nativeEntityManagerFactory;

Eclipse提示:

Multiple markers at this line
- The field AbstractEntityManagerFactoryBean.nativeEntityManagerFactory is not visible
- nativeEntityManagerFactory cannot be resolved or is not a field

编译报错:

/D:/repo_upgrade_tomcat_9/backend/src/main/java/com/backend/util/SLocalContainerEntityManagerFactoryBean.java:[232,21] nativeEntityManagerFactory has private access in org.springframework.orm.jpa.AbstractEntityManagerFactoryBean

解决方案

1. 修复私有字段直接访问问题

Spring 5.3.27中AbstractEntityManagerFactoryBean的nativeEntityManagerFactory字段已改为私有,子类不能直接访问,需改用类提供的保护方法:

将原代码修改为:

EntityManagerFactory emf = provider.createContainerEntityManagerFactory(this.persistenceUnitInfo, getJpaPropertyMap());
postProcessEntityManagerFactory(emf, this.persistenceUnitInfo);
setNativeEntityManagerFactory(emf); // 使用protected方法设置实例
return getNativeEntityManagerFactory(); // 使用get方法返回实例

2. 统一Hibernate依赖版本

当前Hibernate依赖版本混乱(core4.1、entitymanager5.2等),与Spring 5.3不兼容,建议统一为兼容版本(如5.6.15.Final),修改后的Maven依赖如下:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.6.15.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-search-orm</artifactId>
    <version>5.11.12.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.6.15.Final</version>
    <exclusions>
        <exclusion>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
        </exclusion>
        <exclusion>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.2.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.5.Final</version>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:55:30