【问题标题】:Reusing DAOs in another web application在另一个 Web 应用程序中重用 DAO
【发布时间】:2012-06-07 21:17:15
【问题描述】:

我使用 Spring MVC 编写了一个网站,现在我想编写它的后端(即仪表板或 CMS),以便管理员对其进行管理。

由于我为前端编写了所有 DAO,我想在后端重用它们(因为 DB 表显然是相同的,所以前端和后端共享相同的持久性上下文)。

我的想法是将后端编码为一个新的 Web 应用程序,其中 DAO 和域对象从前端作为 jar 文件导出并导入到后端项目中。持久性由 JPA 和 Hibernate 管理,每个 DAO 类如下所示:

@Repository
public class UserDao {
    private EntityManager em;

    // ... Methods...

    @PersistenceContext
    void setEntityManager(EntityManager entityManager) {
        this.em = entityManager;
    }
}

后端网站的持久化配置(即JPA + Hibernate + MySQL)与前端完全相同。我期待这个配置被注入到 JAR 文件中导入的 DAO 中,但这显然没有发生。每次我尝试使用任何 DAO 中的任何方法时,都会收到类似于以下内容的异常:

org.hibernate.hql.ast.QuerySyntaxException: UserJpa 未映射 [SELECT u FROM UserJpa u WHERE u.alias = :alias AND u.closed = false]

有没有办法解决这个问题?还是有更好的方法来实现我想要实现的目标(即使用相同的前端 DAO 对后端进行编码)?

非常感谢!

【问题讨论】:

    标签: java spring jpa spring-mvc persistence


    【解决方案1】:

    我想知道为什么不能将两个 UI 部署为单个应用程序,并为用户和管理员提供基于角色的访问权限。由于您已经在使用 Spring,因此 Spring Security 将是此处按角色限制对管理页面的访问的自然选择。为什么要重写后端?

    【讨论】:

    • 感谢您的回答,@duffymo。说得好,我一开始就是那样做的。我已经在前端使用 Spring Security,因为大多数网站仅适用于注册用户。但是后来我不知道如何正确配置 Spring Security。例如,如果我没有登录,example.com/dashboard/manage-users 应该重定向到 example.com/dashboard/login。而 example.com/my-profile 应该重定向到 example.com/login(或 example.com/registration)。我怎样才能做到这一点..?谢谢!
    • @satoshi,这是一个非常好的问题。我认为您应该将其作为一个单独的问题发布。你会得到更好的答案,它会帮助有类似问题的其他人更容易找到它! (像我一样,我会对这个答案非常感兴趣;-))
    【解决方案2】:

    你也需要导出实体类,因为休眠需要加载所有实体以使用数据库或排除新配置文件中的实体

    关于 Spring Security 我推荐使用唯一的登录页面,但是不同的主页,我认为你可以通过 rol 设置不同的主页

    【讨论】:

      【解决方案3】:

      UserJpa 未映射 [SELECT u FROM UserJpa u WHERE u.alias = :alias AND u.closed = false]

      听起来您只是忘记将第一个应用程序的映射配置包含在第二个应用程序中。确保第二个应用程序中的 JPA 运行时具有关于 UserJpa 类的所有相同配置。

      【讨论】:

        【解决方案4】:

        您是在使用 Hibernate 注释还是 XML 配置进行 OR 映射?在前一种情况下,Hibernate SessionFactory 上的 packagesToScan 属性看不到 UserJpa 类,可能是因为您没有加载您认为正在加载的 JAR。在后一种情况下,您缺少 hibernate.cfg.xml 或其等效项的导入。

        【讨论】:

          猜你喜欢
          • 2018-08-14
          • 1970-01-01
          • 2016-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-11
          • 1970-01-01
          • 2011-01-18
          相关资源
          最近更新 更多