Я делаю первые шаги с игрой 2.1, поэтому я сделал учебное пособие по JavaTodoList на веб-сайте playframework. Все работало, как ожидалось.Получить hibernate-пространственный вверх и бег в игровом каркасе
Далее я изменил указатель todolist, чтобы использовать базу данных postgresql, запущенную в моем блоке dev. Все, что я должен был сделать, чтобы изменить некоторые параметры в application.conf`
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost:5432/todo"
db.default.user=todo
db.default.password=secretpassword
Я обновил страницу, сделал эволюцию базы данных, и снова все работало нормально.
Теперь я хочу играть, чтобы использовать hibernate-spaces для хранения координат местоположения для каждого пункта todolist (на самом деле это может быть любой другой элемент, основанный на местоположении).
Я добавил некоторые libraris в приложение/каталог Lib, а именно:
- Hibernate-Викисклада аннотаций-4.0.1.Final.jar
- гибернации-ядро-4.1.9.Final.jar
- Hibernate-пространственно-4,0-M1.jar
- -stdext JDBC-2.0.jar
- JTS-1.12.jar
- PostGIS-1.5.3.jar-JDBC
- -8.4-701.jdbc4.jar PostgreSQL
Я использовал те же библиотеки на классической GlassFish Java приложение для хранения пространственных объектов, поэтому они подходят друг к другу. Также база postgresql пространственно включена с postgis, это было проверено ранее с помощью классического java-приложения.
Я удлинен мой класс модели для задач списка задач следующим образом:
package models;
import java.util.*;
import play.db.ebean.*;
import play.data.validation.Constraints.*;
import javax.persistence.*;
import com.vividsolutions.jts.geom.Point;
import org.hibernate.annotations.Type;
@Entity
public class Task extends Model {
@Id
public Long id;
@Required
public String label;
@Type(type="org.hibernate.spatial.GeometryType")
@Column(columnDefinition="Point")
public Point location;
public static Finder<Long,Task> find = new Finder(Long.class, Task.class);
public static List<Task> all() {
return find.all();
}
public static void create(Task task) {
task.save();
}
public static void delete(Long id) {
find.ref(id).delete();
}
}
Также я добавил PostGIS JPA Диалектом к моему конф файл:
jpa.dialect=org.hibernate.spatial.dialect.postgis.PostgisDialect
Play компилирует все в порядке, там, где некоторые ошибки, когда библиотеки, в которых отсутствует путь к классам, но я добавил один и другой, как указано выше, до тех пор, пока не появится ошибка. Тем не менее, никаких изменений в базе данных для нового поля местоположения не было. Похоже, что игра игнорирует все связанные с гибернацией пространственные части моего приложения. Он работает так же, как и обычное додольное приложение.
Я думаю, что это имеет какое-то отношение к различным версиям спящего режима (это игра с использованием hibernate3 или hibernate4? Могу ли я перейти на 4?). Может ли кто-нибудь, кто уже испытал это, рассказать мне, какие версии каждой библиотеки он использовал и какие настройки конфигурации должны были быть выполнены?
ОБНОВЛЕНИЕ: Как упоминал Кристофер, я перепутал ebean и jpa. Поэтому я взял образец jpa и перевел его на свой простой тодолистский образец. Я обновил файлы и зависимости проекта проекта, переработал модель и контроллер, чтобы соответствовать JPA EntityManager, и удалил некоторые библиотеки из пути к классам, чтобы использовать hibernate 3, который находится на борту игры 2.1. Я также сделал настройку почти так же, как в примере jpa, мои persistence.xml и application.conf почти похожи друг на друга, за исключением того, что я использую postgres dialect для спящего режима.Я могу скомпилировать мой проект, но когда я начинаю его, я получаю
PersistenceException: [PersistenceUnit: defaultPersistenceUnit] Невозможно настроить EntityManagerFactory
Я настроил многословие пьесы для отладки, так что я узнал, что это исключение возникает после того, как PropertyBinder создаст свойство id моего объекта Task.
Думаю, что я пришел несколько шагов вперед, но не видно конца ...
от комментария вы сделали при ответе Кристофера я могу видеть, вы его полностью понял теперь. Не могли бы вы поделиться своим шаблоном (или, по крайней мере, важной частью конфигурации) в новом ответе? – nietaki
По-прежнему существует проблема, с которой я сейчас сталкиваюсь. Моделирование моих объектов и эволюция базы данных хорошо известны, но проблема в том, что объекты геометрии не сохраняются в базе данных (столбец геометрии пуст). Поскольку у меня не было времени, я еще не отлаживал это, но я думаю, что это всего лишь небольшая ошибка. Когда я исправил это, я поместил шаблон в github в качестве примера JPA-пространственных данных. –