JPA-在实体对象中使用entityManager

时间:2019-02-01 11:47:35

标签: spring entitymanager roo

我从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()时,它都会调用方法instanceManager()实例化一个新的AngrClienti()对象以访问实体管理器。

new AngrClienti().entityManager;

我认为这非常消耗内存,为什么?

1 个答案:

答案 0 :(得分:0)

那么,您还建议如何实现静态EntityManager方法?

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

无论如何,Active Record现在都被视为反模式。如果您是我,我会考虑改用存储库。