Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在另一个web应用程序中重用DAO_Java_Spring_Jpa_Spring Mvc_Persistence - Fatal编程技术网

Java 在另一个web应用程序中重用DAO

Java 在另一个web应用程序中重用DAO,java,spring,jpa,spring-mvc,persistence,Java,Spring,Jpa,Spring Mvc,Persistence,我使用SpringMVC对一个网站进行了编码,现在我想对其后端(即仪表板或CMS)进行编码,以便管理员对其进行管理 因为我为前端编写了所有DAO,所以我想在后端重用它们(因为DB表显然是相同的,前端和后端共享相同的持久性上下文) 我的想法是将后端编码为一个新的web应用程序,其中DAO和域对象作为jar文件从前端导出,并导入到后端项目中。持久性由JPA和Hibernate管理,每个DAO类如下所示: @Repository public class UserDao { private E

我使用SpringMVC对一个网站进行了编码,现在我想对其后端(即仪表板或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未映射[从UserJpa u中选择u,其中u.alias=:alias和u.closed=false]

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


多谢各位

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

您也需要导出实体类,因为hibernate需要加载所有实体才能使用数据库或排除新配置文件中的实体

关于Spring安全性,我建议使用唯一的登录页面,但不同的主页,我认为您可以通过rol设置不同的主页

UserJpa未映射[从UserJpa u中选择u,其中u.alias=:alias和u.closed=false]


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

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

谢谢你的回答,@duffymo。说得好,我最初是这样做的。我已经在使用SpringSecurity作为前端,因为大多数网站只面向注册用户。但后来我不知道如何正确配置Spring安全性。例如,如果我没有登录,example.com/dashboard/manage-users应该重定向到example.com/dashboard/login。而example.com/my-profile应该重定向到example.com/login(或example.com/registration)。我该怎么做。。?谢谢@satoshi,这是个很好的问题。我认为你应该把它作为一个单独的问题发布。你会得到更好的答案,它会帮助其他有类似问题的人找到更容易的答案!(和我一样,我对这个答案非常感兴趣;-))