gpt4 book ai didi

gwt - 了解 Spring Roo 为 GWT 生成的实体代码

转载 作者:行者123 更新时间:2023-12-01 06:40:55 26 4
gpt4 key购买 nike

我们正在研究由 Spring Roo 生成的 GWT 项目但我们不再使用 Roo编辑/生成类。相反,我们现在手动编写所有内容。

对于每个服务器端实体类 Roo 生成的很奇怪 EntityManager获取代码。并且必须维护它,我想很好地理解它,但我没有。以下是生成的实体代码的片段:

@PersistenceContext
transient EntityManager entityManager;

public static final EntityManager entityManager() {
EntityManager em = new Scenario().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;
}

@Transactional
public void persist() {
if (entityManager == null)
entityManager = entityManager();
entityManager.persist(this);
}

public static List<Scenario> findAllScenarios() {
List<Scenario> res = entityManager().createQuery(
"select o from Scenario o order by o.name",
Scenario.class).getResultList();
return res;
}

public static Scenario findScenario(Long id) {
if (id == null)
return null;
return entityManager().find(Scenario.class, id);
}

我的观察和问题:
  • 实例方法使用 EntityManager由 Spring 注入(inject)的字段,这很清楚。但是为什么这件作品是:if(entityManager == null) entityManager = entityManager(); ?难道我们不期望 EntityManagerem字段应该被注入(inject),不能是null (或者有什么问题?)
  • 静态方法创建实体的新实例并获取它的EntityManager领域,为什么?不能是 EntityManager缓存在静态字段或类似的东西?
  • 为什么要阅读 findAllXXX 之类的方法不是 @Transictional ?据我所知,根据 JPA 规范,所有 JPA 操作都应该在事务边界内完成?
  • if (id == null) return null;进入 findXXX方法真的有必要吗?如果我们将 null 设为 id,我们不应该让应用程序崩溃吗?参数表明有问题?
  • 我们可以重写这个 EntityManager以更优雅的方式获取代码(例如,没有那种奇怪的 new Entity().entityManager 的东西)但没有破坏它(可能需要保留一些先决条件)?
  • 为什么是 EntityManager字段 transient ?那很重要吗?
  • 最佳答案

    我完全同意你的看法,代码看起来很可疑。

    http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/dao.html 中完美解释了在 DAO 中使用 EntityManager 和在 Spring 中使用 @Transactional 的常用方法。和 http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html ,我不明白为什么这对于 Roo 生成的代码应该有所不同。

    关于gwt - 了解 Spring Roo 为 GWT 生成的实体代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10482820/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com