1

我使用 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 对后端进行编码)?

非常感谢!

4

4 回答 4

3

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

于 2012-06-03T13:32:52.170 回答
0

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

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

于 2012-06-03T16:40:19.750 回答
0

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

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

于 2012-06-03T16:32:10.643 回答
0

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

于 2012-06-03T16:43:40.077 回答