1

我从我的 Spring 项目中删除了 Spring Roo,这是不必要的,并且构建在 eclipse sts 中花费了很多时间。我执行了一个 Push-In,我的实体对象现在包含旧 Roo 文件的源代码。

或多或少没有改变,包括 PersistentContext 管理,这看起来很奇怪。事实上,我注意到每次我必须创建一个查询时,我都需要实例化实体类才能获得 EntityManager?

在我的实体类中,我有

@Configurable
@Entity
@Table(name = "angr_clienti")
public class AngrClienti {

....

@PersistenceContext
    transient EntityManager entityManager;

public static final EntityManager entityManager() {
        EntityManager em = new AngrClienti().entityManager;
        if (em == null) throw new IllegalStateException("Entity manager has not been injected (is the Spring Aspects JAR configured as an AJC/AJDT aspects library?)");
        return em;
    }

public static List<AngrClienti> findAllAngrClientis() {
        return entityManager().createQuery("SELECT o FROM AngrClienti o", AngrClienti.class).getResultList();
    }

奇怪的是,每次我调用 findAllAngrClientis() 它都会调用方法 entityManager() 实例化一个新的 AngrClienti() 对象来访问实体管理器。

new AngrClienti().entityManager;

我认为它非常消耗内存,那为什么呢?

4

1 回答 1

0

那么,您还打算如何实现静态EntityManager方法?

我不确定你为什么认为创建一个新的实例AngriClienti很昂贵。new AngrClienti().entityManager只是确保EntityManager 为每个工作单元获得一个新的。而且由于对象没有被保留,所以它不是特别消耗内存。

无论如何,Active Records 现在被认为是一种反模式。如果我是你,我会考虑改用存储库。

于 2019-02-01T12:08:32.610 回答