Play Framework中子项目类中的包名称(名称空间) [英] package names (namespaces) in subproject classes in Play Framework
问题描述
我正在尝试在PlayFramework中创建多子模块项目(播放框架2.2.1)。
I am trying to create multi submodule project in PlayFramework (play framework 2.2.1).
我应该如何在子模块中命名包?
How should I name package in submodules?
FE我的结构如下:
- app
- conf
- doc
- logs
- 模块:
- 常见:
- app:
- controllers
- models
- views
- app
- conf
- doc
- logs
- modules:
- common:
- app:
- controllers
- models
- views
- common.routes
我应该如何在文件中命名包(命名空间):
How package (namespace) I should named in file:
/modules/common/app/controllers/Aplication.java
/modules/common/app/controllers/Aplication.java
应该是:
package controllers; package controllers.common; package common.app.controllers;
实际上我喜欢这样:
package controllers.common; public class Index extends Controller {}
与我的模型类相同的问题子模块。
F.e.在文件中:
/modules/common/app/models/User.javaThe same issue I have with my model classes in submodules. F.e. in file: /modules/common/app/models/User.java
应该是:
package models; package models.common; package common.app.models;
实际上我喜欢这样:
package models.common; public class User {}
我得到的运行时错误:
[IllegalArgumentException: Unknown entity: models.Cart]
推荐答案
我找到了解决方案。
无论我如何命名包都没关系。 play框架的一个要求是使用以下命令启动包的名称:
It dosn't matter how I named packages. One requirement from play framework is to start name of package with:
- 控制器 - 在命名控制器包的情况下(fe:
package controllers.common;
) - models - 如果是命名模型包(fe:
package models.common;
,或只是包模型;
)
- controllers - in case of naming controller package (f.e:
package controllers.common;
) - models - in case of naming model package (f.e:
package models.common;
, or justpackage models;
)
运行时错误:
[IllegalArgumentException: Unknown entity: models.Cart]
是由Jpa / Hibernate配置引起的。问题是Jpa / Hibernate在编译时会看到我的实体(由注释@Entity标记),但在运行时不会。要解决这个问题,我必须手动将所有模型类(权利)指向persistance.xml文件,如下所示:
Is caused by Jpa/Hibernate configuration. Problem is that Jpa/Hibernate sees my entities (mark by annotation @Entity) while compilation, but in runtime dosn't. To fix that I've to manually point all my models class (entitites) in persistance.xml file as follow:
/conf/META-INF/persistence.xml
/conf/META-INF/persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <non-jta-data-source>DefaultDS</non-jta-data-source> <class>models.AppMode</class> <class>models.Customer</class> <class>models.Complaint</class> <properties> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>
在此处查看更多信息:如何使用jpa / hibernate在playframework子模块中保存模型实体
See more here: How to persist models entity in playframework submodule using jpa/hibernate
这篇关于Play Framework中子项目类中的包名称(名称空间)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
- app:
- common:
- app:
- 常见: