JPA / EclipseLink не возвращает результатов - PullRequest
2 голосов
/ 23 июня 2010

Я новичок в Java и JPA.Я пытаюсь подключиться к базе данных и вернуть некоторые результаты из таблицы, но когда я запускаю запрос, я получаю пустой список в результате, даже если в таблице более 100 000 строк.

Вот мое постоянство.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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_1_0.xsd"
version="1.0">

<persistence-unit name="tDocc-PG" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
     <!--<exclude-unlisted-classes>false</exclude-unlisted-classes>-->
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://172.16.100.111/tDoccTEST" />
        <property name="javax.persistence.jdbc.user" value="REMOVED" />
        <property name="javax.persistence.jdbc.password" value="REMOVED" />
    </properties>
</persistence-unit>    

Это моя сущность:

package com.tdocc.core.entities;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="Documents")
public class Document {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int documentID;
private String name;
private int folderID;
private String hash;
private String link;
private String fileType;
private long fileSize;
private String owner;
private String modifier;
private String description;
private String referenceNumber;
@Temporal(TemporalType.DATE)
private Date dateAdded;
@Temporal(TemporalType.DATE)
private Date dateModified;
private boolean readOnly;
private int superseded;
private int category;
private String ocr;
private boolean deleted;

public int getDocumentID() {
    return documentID;
}
public void setDocumentID(int documentID) {
    this.documentID = documentID;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getOwner() {
    return owner;
}
public void setOwner(String owner) {
    this.owner = owner;
}
}

И это мой тестовый класс, который я использую для запуска запроса:

package com.tdocc.core.tests;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import com.tdocc.core.entities.Document;

import junit.framework.TestCase;

public class DocumentTest extends TestCase {
public void testConnection() {
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("tDocc-PG");
    EntityManager em = factory.createEntityManager();
    Query q = em.createQuery("SELECT d FROM Document d");
    q.setMaxResults(20);

    List<Document> documents = q.getResultList();
    for (Document doc : documents) {
        System.out.println(doc.getName());
    }

    assertTrue(true);
}
}

Есть идеи?Спасибо.

Ответы [ 2 ]

1 голос
/ 04 июля 2010

Росс,

Мы улучшили нашу обработку метаданных в EclipseLink 2.1 (Helios), выпущенном 23 июня, чтобы решить некоторые проблемы с учетом регистра.

Если вы укажете имя таблицы как имеющееся, оно будет использовать ваш регистр в сгенерированном SQL.

Если вам нужны кавычки в сгенерированном SQL, вы можете указать имя таблицы как:

@ Table (имя = "\" Documents \ "")

Doug

1 голос
/ 23 июня 2010

Каждое выглядит прекрасно для запроса только для чтения, но, ну, этого недостаточно, чтобы что-то подтвердить. Я бы активировал немного регистрации, установив следующие свойства в persistence.xml:

  <property name="eclipselink.logging.level" value="FINEST" />
  <property name="eclipselink.logging.level.sql" value="FINEST" />

Это, помимо прочего, будет регистрировать запрос SQL. Попробуйте выполнить его в клиенте SQL на основе JDBC (например, в Eclipse или Squirrel), используя точную такую ​​же строку подключения и учетные данные. Также проверьте весь журнал для чего-нибудь неожиданного.

...