Java Play Framework子项目类中的包名称(名称空间)

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;

我正在尝试在PlayFramework(PlayFramework 2.2.1)中创建多个子模块项目

我应该如何命名子模块中的包

F.E.我的结构如下:

  • 应用程序
  • 形态
  • 医生
  • 日志
  • 模块:
  • 常见的:
    • 应用程序:
      • 控制器
      • 模型
      • 观点
    • 形态:
      • 共同路线
    • build.sbt
  • 计划
  • 公开的
  • 目标
  • 试验
我应该如何在文件中命名包(命名空间):

/模块/common/app/controllers/Aplication.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 {}
子模块中的模型类也存在同样的问题。 文件中的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。我遇到了另一个问题。你能帮忙吗?