2013-02-24 3 views
1

Я делаю первые шаги с игрой 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.

Думаю, что я пришел несколько шагов вперед, но не видно конца ...

+0

от комментария вы сделали при ответе Кристофера я могу видеть, вы его полностью понял теперь. Не могли бы вы поделиться своим шаблоном (или, по крайней мере, важной частью конфигурации) в новом ответе? – nietaki

+1

По-прежнему существует проблема, с которой я сейчас сталкиваюсь. Моделирование моих объектов и эволюция базы данных хорошо известны, но проблема в том, что объекты геометрии не сохраняются в базе данных (столбец геометрии пуст). Поскольку у меня не было времени, я еще не отлаживал это, но я думаю, что это всего лишь небольшая ошибка. Когда я исправил это, я поместил шаблон в github в качестве примера JPA-пространственных данных. –

ответ

2

Вы, кажется, смешивая в Ebean с JPA - они взаимно исключают друг друга.

Вот пример JPA для вас:

https://github.com/playframework/Play20/tree/master/samples/java/computer-database-jpa

+0

Я думаю, что эта проблема, я думал об Ebean как обертке вокруг JPA и пытался настроить ее на использование hibernate-spaces. Я не рассматривал все образцы, потому что я не знал, в чем смысл каждого из них. Кроме того, документация не давала мне понять, как начать с модели JPA (зависимости sbt - еще одна вещь, которую мне еще предстоит изучить). Спасибо за предложение, я думаю, что с этим все хорошо. Мне нужно некоторое время, чтобы переписать модели и контроллеры в соответствии с JPA, но я сообщу вам, если мне удастся ... Жаль, мне понравилась простота использования реализации модели Ebean. –

+0

Как вы можете прочитать в моем UPDATE выше, я почти скопировал образец jpa и перенесил его на простой образец todolist с домашней страницы воспроизведения. Таким образом, переиздавая модели и классы контроллеров и все файлы конфигурации, которые я многому научился, я думаю, что приложение «говорит» JPA сейчас. К сожалению, сейчас я получаю свойство PersistenceException (невозможно настроить EntityManagerFactory), и я не мог понять, почему. Возможно, это материал для совершенно новой темы вопроса. –

+0

Итак, я сделал это, благодаря вашему совету. Лучше всего перейти в Hibernate-space вверх и запустить в Play, чтобы начать с образца computer-database-jpa. Я разветвил его в новом проекте, добавил геометрию к модели, переконфигурировал ее для использования postgresql и диалекта postgis. Теперь у меня есть хороший шаблон для создания пространственных приложений с игрой очень быстро. –