SpringBoot依赖注入在休眠实体中失败

时间:2019-03-14 10:14:36

标签: java hibernate spring-boot dependency-injection spring-data-jpa

我想出了一个奇怪的问题,我必须在尝试过的Entity类中注入Spring Managed依赖项,但是依赖项是null,我做错了无法弄清。

我有一个实用程序类的依赖项,该实用程序类被标记为组件,我可以从控制器和服务类中访问它,但是在实体中却不能,因为缺少它,因为它们是spring-boot,我是否会丢失一些我不知道的jars? 这是代码:

@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 个答案:

答案 0 :(得分:1)

AFAIK spring不会对实体类进行后处理,因此它不会自动装配任何东西,实体也不是spring上下文bean,并且将一些util类放入实体bean中确实是一种不好的做法。如果您确实需要使用一些实用程序,也许只是向其中添加静态方法?

答案 1 :(得分:0)

实体不是spring bean,创建不是由spring容器管理的。它们是由持久性提供程序创建的。您不能在此处使用自动装配线和组件注释。

将SelUtil添加到实体意味着您要保留它。真的是这样吗?

答案 2 :(得分:0)

是的,暂时不可能。 但是在Spring的帮助下有一个补丁工作,在dao和对我有用的控制器之间添加了额外的Service类层。 我做了一些更改:

  1. @Transient的成员变量中添加了Bot class(super class)注释,因此child仍然可以使用它,并且还添加了一个抽象方法,即test()
  2. 添加了具有方法BotRepoCustom的服务接口Bot getBotWithTransientFields(Long id);
  3. 实现该服务类BotRepoCustomImpl

现在,当我通过BotRepoCustomImpl类获得具有Spring Dependency的Bot时,可以直接使用它。 目前,补丁程序有效,并且没有静态方法。 如果您想使用代码,我可以提供。