package names (namespaces) in subproject classes i

2019-02-20 06:16发布

I am trying to create multi submodule project in PlayFramework (play framework 2.2.1).

How should I name package in submodules?

F.E. I have structure as follow:

  • app
  • conf
  • doc
  • logs
  • modules:
    • common:
      • app:
        • controllers
        • models
        • views
      • conf:
        • common.routes
      • build.sbt
  • project
  • public
  • target
  • test

How package (namespace) I should named in file:

/modules/common/app/controllers/Aplication.java

Wich one should it be:

package controllers;
package controllers.common;
package common.app.controllers;

actually I have like that:

package controllers.common;
public class Index extends Controller {}

The same issue I have with my model classes in submodules. F.e. in file: /modules/common/app/models/User.java

Wich one should it be:

package models;
package models.common;
package common.app.models;

actually I have like that:

package models.common;
public class User {}

runtime error that I get:

[IllegalArgumentException: Unknown entity: models.Cart]

1条回答
姐就是有狂的资本
2楼-- · 2019-02-20 06:46

I've found solution.

It dosn't matter how I named packages. One requirement from play framework is to start name of package with:

  • 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 just package models; )

Runtime error:

[IllegalArgumentException: Unknown entity: models.Cart]

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

<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>

See more here: How to persist models entity in playframework submodule using jpa/hibernate

查看更多
登录 后发表回答