Java Play Framework子项目类中的包名称(名称空间)
我正在尝试在PlayFramework(PlayFramework 2.2.1)中创建多个子模块项目 我应该如何命名子模块中的包 F.E.我的结构如下:Java Play Framework子项目类中的包名称(名称空间),java,namespaces,package,playframework-2.2,Java,Namespaces,Package,Playframework 2.2,我正在尝试在PlayFramework(PlayFramework 2.2.1)中创建多个子模块项目 我应该如何命名子模块中的包 F.E.我的结构如下: 应用程序 形态 医生 日志 模块: 常见的: 应用程序: 控制器 模型 观点 形态: 共同路线 build.sbt 计划 公开的 目标 试验 我应该如何在文件中命名包(命名空间): /模块/common/app/controllers/Aplication.java 应该是哪一个: package controllers;
- 应用程序
- 形态
- 医生
- 日志
- 模块:
- 常见的:
- 应用程序:
- 控制器
- 模型
- 观点
- 形态:
- 共同路线
- build.sbt
- 应用程序:
- 计划
- 公开的
- 目标
- 试验
package controllers;
package controllers.common;
package common.app.controllers;
package models;
package models.common;
package common.app.models;
事实上,我喜欢这样:
package controllers.common;
public class Index extends Controller {}
package models.common;
public class User {}
子模块中的模型类也存在同样的问题。
文件中的F.e.:
/模块/common/app/models/User.java
应该是哪一个:
package controllers;
package controllers.common;
package common.app.controllers;
package models;
package models.common;
package common.app.models;
事实上,我喜欢这样:
package controllers.common;
public class Index extends Controller {}
package models.common;
public class User {}
我得到的运行时错误:
[IllegalArgumentException: Unknown entity: models.Cart]
我找到了解决办法
我如何命名软件包并不重要。play framework的一个要求是在包的名称开头加上:
- 控制器-在命名控制器包的情况下(例如:
)包控制器.common;
- 模型-在命名模型包的情况下(例如:
,或仅包模型.common;
)包模型;
[IllegalArgumentException: Unknown entity: models.Cart]
是由Jpa/Hibernate配置引起的。问题是Jpa/Hibernate在编译时看到我的实体(通过注释@Entity标记),但在运行时却看不到。为了解决这个问题,我必须手动将所有模型类(Entities)指向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>
org.hibernate.ejb.HibernatePersistence
默认值
models.AppMode
模型。客户
模型.投诉
请参阅此处的详细信息:您将文件夹命名为“模块”,但它应该像“子项目”一样处理?在游戏中,您可以选择您想要的任何包名称。据我所知没有限制。此问题是否缺少错误消息?使用自定义命名空间时会收到什么错误?我收到一个运行时错误:[IllegalArgumentException:未知实体:models.Cart]我不知道为什么会发生这种情况。我认为这是由包名引起的。问题很不清楚,你们已经发布了3个包名约定,但你们使用哪一个?你试过另一个吗?它们是否都产生相同的错误消息?请在github上发布您的项目。我发现每个版本在包名的开头都有控制器。*和模型。*。我提到的运行时错误与jpa/hibernate有关。Jpa/hibernate在编译实体时会看到它。但当我在运行时以某种方式访问实体时,它就不再存在了,这导致了前面提到的运行时错误。干得好!但请记住,该游戏并不要求以包名开头。我有一些工作示例,其中包以
nl.package
开头。但是我用了Ebean而不是Hibernate。我遇到了另一个问题。你能帮忙吗?