I am trying to create a project using Jersey as a JAX-RS Reference Implementation and Hibernate as a JPA Reference Implementation. Project is separated in 2 modules, projectWeb and projectJPA.
In projectJPA, I have tree classes: CityServiceTest.java, CityService.java and City.java
In projectWeb I have one class: CityServiceImpl.java
CityServiceTest.java:
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
public class CityServiceTest {
public static EntityManagerFactory ENTITY_MANAGER_FACTORY = Persistence.createEntityManagerFactory("NepremicnineDM");
public static void main(String[] args) {
// TODO Auto-generated method stub
getCities();
}
public static void getCities() {
EntityManager em = ENTITY_MANAGER_FACTORY.createEntityManager();
String strQuery = "SELECT c FROM City c WHERE c.id IS NOT NULL";
TypedQuery<City> tq = em.createQuery(strQuery, City.class);
List<City> cities = tq.getResultList();
for(City city : cities) {
System.out.print(city);
}
}
}
When I run it as Java application, everything works fine, cities get printed in console like that: City [id=1, name=Kabul, cCode=AFG]City [id=2, name=Qandahar, cCode=AFG]City [id=3, name=Herat, cCode=AFG],...
Problems appear when I try to invoke CityService class from projectWeb, from CityServiceImpl class. CityService class is very simillar to CityServiceTest class.
CityService class:
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
public class CityService {
public static EntityManagerFactory ENTITY_MANAGER_FACTORY = Persistence.createEntityManagerFactory("NepremicnineDM");
public List<City> getCities() {
EntityManager em = ENTITY_MANAGER_FACTORY.createEntityManager();
String strQuery = "SELECT c FROM City c WHERE c.id IS NOT NULL";
TypedQuery<City> tq = em.createQuery(strQuery, City.class);
List<City> cities = tq.getResultList();
return cities;
}
}
CityServiceImpl class:
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.NepremicnineJPA.City;
import com.NepremicnineJPA.CityService;
@Path("city")
public class CityServiceImpl {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<City> getApp() {
CityService cs = new CityService();
...
City class:
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "city")
public class City implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", unique = true)
private int id;
@Column(name = "Name")
private String name;
@Column(name = "CountryCode")
private String cCode;
...
ProjectJPA pom snippet:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.1.Final</version>
</dependency>*
ProjectWeb pom snippet:
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-binding</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
So when I try to invoke it via projectWeb, Wildfly gives me an error:
javax.servlet.ServletException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: City is not mapped [SELECT c FROM City c WHERE c.id IS NOT NULL] at deployment.NepremicnineDM.ear.NepremicnineDMWeb.war//org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410) at deployment.NepremicnineDM.ear.NepremicnineDMWeb.war//org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346) at deployment.NepremicnineDM.ear.NepremicnineDMWeb.war//org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366) at deployment.NepremicnineDM.ear.NepremicnineDMWeb.war//org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319) at deployment.NepremicnineDM.ear.NepremicnineDMWeb.war//org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205) at [email protected]//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) ...
Can anyone please help me? P.S.: I know simillar topics were answered many times, but I couldnt quite find the answer that worked for me. Thanks.
Edit: persistence.xml file
<persistence-unit name="NepremicnineDM" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.NepremicnineDMJPA.NepremicnineDM.City</class>
<properties>
<property name="javax.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver"></property>
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost/world"></property>
<property name="javax.persistence.jdbc.user"
value="root"></property>
<property name="javax.persistence.jdbc.password"
value="root"></property>
</properties>
</persistence-unit>