如何将 HQL 放入实体中?

How do I put HQL in an entity?

我有一个 Hibernate 实体,我想在其中放入一个方法。此方法将调用实体管理器和 运行 准备好的语句,但我不知道如何实例化实体管理器。每当我尝试时,像这样自动装配它:

@Autowired
private transient EntityManager entityManager;

当我 运行 应用程序时,entityManager 为空。自动装配适用于我所有其他 类。为什么我不能在我的实体中自动装配 entityManager,以及如何在实体中执行我的查询?

@Autowired 用于 bean,类 用于 @Service 或 @Component。 类 标记为@Configuration 也可以使用@Autowired。这些 类 的新实例由 Spring 创建和管理,如果您尝试创建这些 类 的新实例,@Autowired 也不会在那里工作。比如MyClass myClass = new MyClass()

标有@Entity 的

类 不是托管bean,当您从数据库中查询它们时,它们是由实体管理器创建的,但是当您创建新行时,您会创建一个新实例。 Spring 对他们来说并不神奇。您应该从@Service 调用您的存储过程,就像您使用@Repository 或实体管理器来保存@Entity 一样。