如何优雅地忽略现有的ManyToOne关系?

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

我的遗留代码在 Hibernate 的一个实体中具有很多关系。 目前其中部分未使用(数据库中存在空值),但 EntityManager 查询(例如刷新())在尝试加载无用关系时可能会占用大量资源。



> @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.MERGE,
> CascadeType.PERSIST, CascadeType.DETACH })
>     @JoinColumn(name = "template_id")
>     private Manual exTemplate;

事实上 template_id 始终为 null - 所以这种关系是没有用的。

我怎样才能温柔地忽略这样的关系呢? 该实体是核心,简单地删除它 - 是有风险的。

我尝试使用@Transient注释,从字段中删除@ManyToOne和@JoinColumn, 但遇到这样的例外:

[错误] org.springframework.boot.context.embedded.tomcat.TomcatStarter

  • 启动 Tomcat 上下文时出错。异常:org.springframework.beans.factory.UnsatisfiedDependencyException。 消息:创建名为“logFilter”的 bean 时出错:不满意 通过字段“authService”表达的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为“authService”的 bean 时出错:依赖关系不满足 通过字段“externalAuthService”表示;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“authServiceExternalImpl”的 bean 时出错:不满意 通过字段“mqService”表达的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为“rabbitMQService”的 bean 时出错:不满意 通过字段“objectMapper”表达的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建类路径资源中定义的名称为“objectMapper”的 bean [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化Bean失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [com.fasterxml.jackson.databind.ObjectMapper]:工厂 方法“objectMapper”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为“config”的 bean,在类路径资源中定义 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化Bean失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.rest.core.config.RepositoryRestConfiguration]: 工厂方法“config”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为“repositories”的 bean,在类路径资源中定义 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: 通过工厂方法实例化Bean失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.data.repository.support.Repositories]:工厂 方法“存储库”抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为“crmTaskGoodRepository”的 bean:无法创建内部 bean '(inner bean)#787cddea' 类型 [org.springframework.orm.jpa.SharedEntityManagerCreator] 设置时 bean 属性“entityManager”;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名称为“(inner bean)#787cddea”的 bean:无法解析 设置构造函数时引用 bean 'entityManagerFactory' 争论;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建类路径中定义的名为“entityManagerFactory”的 bean 资源 [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: 调用init方法失败;嵌套异常是 javax.persistence.PersistenceException:[PersistenceUnit:默认] 无法构建 Hibernate SessionFactory
java hibernate orm persistence many-to-one
1个回答
0
投票

简单地删除这里的@JoinColumn(name = "template_id"),以及模板类。您是否删除了这两个地方的注释并尝试过。 我在这两个地方的删除不会影响任何事情。 只需将其删除并尝试即可。

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