Java Springboot依赖项注入在hibernate实体中失败

Java Springboot依赖项注入在hibernate实体中失败,java,hibernate,spring-boot,dependency-injection,spring-data-jpa,Java,Hibernate,Spring Boot,Dependency Injection,Spring Data Jpa,我遇到了一个奇怪的问题,我必须在一个实体类中注入Spring管理的依赖项,我已经尝试过了,但依赖项是null,我不知道我做错了什么 我有一个标记为组件的实用程序类的依赖项,我可以从控制器和服务类访问它,但不能在实体中访问。我是否缺少一些我不知道的JAR,因为它是spring boot? 以下是代码: @Table @Entity @DiscriminatorValue("3") @Component public class LoginBot extends Bot implements Ser

我遇到了一个奇怪的问题,我必须在一个实体类中注入Spring管理的依赖项,我已经尝试过了,但依赖项是
null
,我不知道我做错了什么

我有一个标记为组件的实用程序类的依赖项,我可以从控制器和服务类访问它,但不能在实体中访问。我是否缺少一些我不知道的JAR,因为它是spring boot? 以下是代码:

@Table
@Entity
@DiscriminatorValue("3")
@Component
public class LoginBot extends Bot implements Serializable {
    private static final long serialVersionUID = 1L;
    public LoginBot() {}

    @Autowired
    SelUtil util;

    @Override
    public Map<String, Object> test() {
        Map<String, Object> returnMap=new HashMap<>();
        util.selectBrowserAndPlatform(this);
        return returnMap;
    }
}
@表格
@实体
@鉴别器值(“3”)
@组成部分
公共类LoginBot扩展Bot实现可序列化{
私有静态最终长serialVersionUID=1L;
public LoginBot(){}
@自动连线
SelUtil-util;
@凌驾
公共地图测试(){
Map returnMap=newhashmap();
util.选择BrowserAndPlatform(此选项);
返回地图;
}
}

AFAIK-spring不会对实体类进行后处理,因此它不会自动连接任何东西,实体不是spring上下文bean,而且将一些util类放入实体bean中是一种非常糟糕的做法。如果您真的需要使用一些util,也许只需要在其中添加静态方法?

假设spring不后处理实体类,因此它不会自动连接任何东西,实体不是spring上下文bean,并且将一些util类放入实体bean中是一种非常糟糕的做法。如果您真的需要使用一些UTIL,可以只向其中添加静态方法?

实体不是SpringBean,创建不由SpringContainer管理。它们是由持久性提供者创建的。不能在此处使用autowire和零部件注释


将SelUtil添加到实体意味着您希望将其持久化。确实如此?

实体不是SpringBean,创建不是由SpringContainer管理的。它们是由持久性提供者创建的。不能在此处使用autowire和零部件注释


将SelUtil添加到实体意味着您希望将其持久化。真的是这样吗?

是的,现在还不可能。 但是,在Spring的帮助下,有一个补丁在dao和控制器之间添加了一层额外的服务类,这对我来说是可行的。 我做了一些改变:

  • Bot类(超级类)
    中的成员变量中添加了
    @Transient
    注释,这样子级无论如何都会得到它,并添加了一个抽象方法,即
    test()
  • 添加了一个服务接口
    BotRepoCustom
    ,该接口具有方法
    Bot getBotWithTransientFields(长id)
  • 实现该服务类
    botreposcustomimpl
  • 现在,当我使用
    botreposcustomimpl
    类获得具有Spring依赖关系的Bot时,我可以直接使用它。 目前,补丁可以工作,没有静态方法。
    如果您需要工作代码,我可以提供。

    是的,现在还不可能。 但是,在Spring的帮助下,有一个补丁在dao和控制器之间添加了一层额外的服务类,这对我来说是可行的。 我做了一些改变:

  • Bot类(超级类)
    中的成员变量中添加了
    @Transient
    注释,这样子级无论如何都会得到它,并添加了一个抽象方法,即
    test()
  • 添加了一个服务接口
    BotRepoCustom
    ,该接口具有方法
    Bot getBotWithTransientFields(长id)
  • 实现该服务类
    botreposcustomimpl
  • 现在,当我使用
    botreposcustomimpl
    类获得具有Spring依赖关系的Bot时,我可以直接使用它。 目前,补丁可以工作,没有静态方法。
    如果您想要工作代码,我可以提供。

    这让我知道,我可以告诉spring后处理几个bean,可能有许多静态方法也是不好的编程实践,因为如果它扩展到某个级别,静态将占用额外的空间,这让我知道,我可以告诉spring后处理几个bean,可能有许多静态方法方法也是一种糟糕的编程实践,因为如果它扩展到某个级别,静态将占用额外的空间为什么需要在实体类中注入bean?实体应该是简单的POJO,仅此而已。SelUtil应该做什么?我正在创建一些例行工作,根据调用的不同,例行工作也不同。我需要一个具有不同实现的调用,是的,我曾考虑过策略设计模式,但在hibernate中我是如何做到这一点的,因为我在db中也需要这一点。我不明白为什么在一个不应该有逻辑的实体中需要
    SelUtil
    。您应该在服务中移动您的逻辑,该服务将创建适当的实体,然后将其传递给dao/存储库以持久化它方法,使其看起来非常破旧,因此我避免使用它,而是创建了一个类,而不是将整个代码编写到不同的类中,因为有许多常用方法最终需要对其进行分组和模块化?实体应该是简单的POJO,仅此而已。SelUtil应该做什么?我正在创建一些例行工作,根据调用的不同,例行工作也不同。我需要一个具有不同实现的调用,是的,我曾考虑过策略设计模式,但在hibernate中我是如何做到这一点的,因为我在db中也需要这一点。我不明白为什么在一个不应该有逻辑的实体中需要
    SelUtil
    。您应该在服务中移动您的逻辑,该服务将创建适当的实体,然后将其传递给dao/存储库以持久化它方法,使其看起来非常破旧,因此我避免使用它,并创建了一个类,而不是将整个代码编写到不同的类中,因为有许多常用的方法,我最终将不得不对其进行分组和模块化。而不是在spring中编写您自己的后处理器,这样它就可以将其依赖性注入到该类中,在此方面的任何帮助都值得@peterYou感谢得到了同样的答案