Witam,
Prowadzę niszczącą walkę z narzędziem do testowania JPQL. Korzystam z NetBeans 7.3. Moje zapytania działają, nie mogę jednak ich przetestować.
IDE zapewnia konsole do testowania JPQL. Mogę ją uruchomić po zaznaczeniu pliku persistance.xml i wybraniu "Run JPQL Query".
Po uruchomieniu konsolki widzę mój "Persistance Unit" i mogę pisać zapytanie. Niewiele myśląc piszę proste zapytanie (zwrócenie wszystkich kategorii):
"SELECT c FROM Category c"
Mój serwer aplikacji jak i baza danych są oczywiście uruchomione. W jednej z encji mam podpiete joda-time (scope provider, wrzucone na serwer aplikacji, dziala i konwertuje joda DateTime na java.sql.Timestamp i odwrotnie).
W PeristanceUnit bez jodaTime tez nie moge wykonac zadnego zapytania. Co trzeba zrobic, aby mozna bylo wykonac zapytanie JPQL? W gre wchodzi uzycie innego narzedzia niz NetBeans.
avax.persistence.PersistenceException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [pl.nikt_biblio-ejb_ejb_1.0-SNAPSHOTPU] failed. Close all factories for this PersistenceUnit.
Internal Exception: java.lang.NoClassDefFoundError: org/joda/time/DateTime
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createDeployFailedPersistenceException(EntityManagerSetupImpl.java:816)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:756)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302)
Caused by: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [pl.nikt_biblio-ejb_ejb_1.0-SNAPSHOTPU] failed. Close all factories for this PersistenceUnit.
Internal Exception: java.lang.NoClassDefFoundError: org/joda/time/DateTime
at org.eclipse.persistence.exceptions.EntityManagerSetupException.deployFailed(EntityManagerSetupException.java:238)
... 8 more
Caused by: java.lang.NoClassDefFoundError: org/joda/time/DateTime
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
at java.lang.Class.getDeclaredMethods(Class.java:1845)
at org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getDeclaredMethods(PrivilegedAccessHelper.java:324)
at org.eclipse.persistence.internal.jpa.metadata.listeners.EntityListenerMetadata.getDeclaredMethods(EntityListenerMetadata.java:254)
at org.eclipse.persistence.internal.jpa.metadata.listeners.EntityClassListenerMetadata.process(EntityClassListenerMetadata.java:89)
at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.processListeners(EntityAccessor.java:1220)
at org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor.addEntityListeners(MetadataProcessor.java:138)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:588)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.joda.time.DateTime
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 15 more
Moj persitance.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="pl.nikt_biblio-ejb_ejb_1.0-SNAPSHOTPU" transaction-type="JTA">
<jta-data-source>jdbc/projekt</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties/>
</persistence-unit>
</persistence>
Moja encja:
package pl.nikt.entities;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
/*
* @author Nikt
*/
@Entity
@Table(name = "category")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Category.findAll", query = "SELECT c FROM Category c"),
@NamedQuery(name = "Category.findByCategoryId", query = "SELECT c FROM Category c WHERE c.categoryId = :categoryId"),
@NamedQuery(name = "Category.findByCategoryName", query = "SELECT c FROM Category c WHERE c.categoryName = :categoryName"),
@NamedQuery(name = "Category.findByNumberOfFiles", query = "SELECT c FROM Category c WHERE c.numberOfFiles = :numberOfFiles")})
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "category_seq", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "category_seq", sequenceName = "category_id_seq", allocationSize = 1)
@Basic(optional = false)
@Column(name = "category_id", unique = true)
private Integer categoryId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 80)
@Column(name = "category_name", unique = true)
private String categoryName;
@Basic(optional = false)
@NotNull
@Column(name = "number_of_files")
private int numberOfFiles;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "categoryId")
private List<File> fileList;
public Category() {
}
public Category(Integer categoryId) {
this.categoryId = categoryId;
}
public Category(String categoryName) {
this.categoryName = categoryName;
this.numberOfFiles = 0;
}
public Category(Integer categoryId, String categoryName, int numberOfFiles) {
this.categoryId = categoryId;
this.categoryName = categoryName;
this.numberOfFiles = numberOfFiles;
}
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public int getNumberOfFiles() {
return numberOfFiles;
}
public void setNumberOfFiles(int numberOfFiles) {
this.numberOfFiles = numberOfFiles;
}
@XmlTransient
public List<File> getFileList() {
return fileList;
}
public void setFileList(List<File> fileList) {
this.fileList = fileList;
}
@Override
public int hashCode() {
int hash = 0;
hash += (categoryId != null ? categoryId.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Category)) {
return false;
}
Category other = (Category) object;
if ((this.categoryId == null && other.categoryId != null) || (this.categoryId != null && !this.categoryId.equals(other.categoryId))) {
return false;
}
return true;
}
@Override
public String toString() {
return "pl.nikt.entities.Category[ categoryId=" + categoryId + " ]";
}
}