我从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;
我认为这非常消耗内存,为什么?
答案 0 :(得分:0)
那么,您还建议如何实现静态EntityManager
方法?
我不确定您为什么认为创建新的AngriClienti
实例会很昂贵。 new AngrClienti().entityManager
只是确保为每个工作单元获得一个新的EntityManager
。并且由于不保留对象,因此它不会特别消耗内存。
无论如何,Active Record现在都被视为反模式。如果您是我,我会考虑改用存储库。