在Spring原生中:当配置了BytecodeProvider时,不允许在运行时生成HibernateProxy实例

问题描述 投票:0回答:1

我有一个具有惰性关系的用户实体

 @JoinTable(name = "user_identities", joinColumns = {
            @JoinColumn(name = "user_id")}, inverseJoinColumns = {
            @JoinColumn(name = "user_identity_id")})
    @OneToMany(fetch = FetchType.LAZY, orphanRemoval = true)
    private Set<Identity> identities;

    @JoinTable(name = "user_roles", joinColumns = {
            @JoinColumn(name = "user_id")}, inverseJoinColumns = {
            @JoinColumn(name = "role_id")})
    @OneToMany(fetch = FetchType.LAZY)
    private Set<Role> roles;

我执行休眠

@Query("SELECT u FROM User u JOIN u.identities i JOIN FETCH u.roles r WHERE i.sub = :sub AND i.issuer = :issuer")
Optional<User> findByIdentitySubAndIssuer(String sub, String issuer);

在 jvm 模式(非本机)下一切正常,但在本机映像中,我收到以下错误:

当配置的 BytecodeProvider 为“none”时,不允许在运行时生成 HibernateProxy 实例;您的模型需要启用更高级的 BytecodeProvider..

我使用的是Spring Boot 3.1.0

Hibernate 版本 6.2.2 Final

我试图启用休眠增强器,添加到属性 杰帕: 特性: 休眠: 增强剂: 启用:真

这导致应用程序在本机模式下启动时出现另一个异常 无法初始化 JPA EntityManagerFactory:默认解析器抛出异常 无法实例化命名策略类 [org.hibernate.boot.model.relational.ColumnOrderingStrategyStandard]

更新: 和 id 'org.springframework.boot' 版本 '3.0.7' 和 id 'org.hibernate.orm' 版本“6.1.7.Final

还在获取 在 Spring 原生中:当配置了 BytecodeProvider 时,不允许在运行时生成 HibernateProxy 实例

请帮忙。 tnx

java spring spring-boot hibernate graalvm
1个回答
3
投票

这个Spring问题中所述,您需要在构建时通过hibernate-enhance-maven-plugin

提供字节码增强

梯度

plugins {
    id "org.hibernate.orm" version "<version-to-use>"
}

hibernate {
    enhancement {
        lazyInitialization true
    }
}

行家

    <plugin>
        <groupId>org.hibernate.orm.tooling</groupId>
        <artifactId>hibernate-enhance-maven-plugin</artifactId>
        <version>$currentHibernateVersion</version>
        <executions>
            <execution>
                <configuration>
                    <failOnError>true</failOnError>
                    <enableLazyInitialization>true</enableLazyInitialization>
                </configuration>
                <goals>
                    <goal>enhance</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

还要考虑到,在最新的 Hibernate 版本 6.2 中,插件中使用的 enableLazyInitialization 参数已被弃用并默认启用: HHH-15641

有关字节码增强的更多信息,请参阅Hibernate 文档

© www.soinside.com 2019 - 2024. All rights reserved.