【发布时间】:2013-02-24 16:19:33
【问题描述】:
我正在使用 play 2.1 迈出第一步,所以我在 playframework 网站上完成了 JavaTodoList 教程。一切都按预期进行。
接下来,我将 todolist 更改为使用在我的开发盒上运行的 postgresql 数据库。我所要做的就是更改 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-spatial 将位置坐标存储到每个 todolist 项目(实际上可以是任何其他基于位置的项目)。
我在app/lib目录下添加了一些libraris,即:
- hibernate-commons-annotations-4.0.1.Final.jar
- hibernate-core-4.1.9.Final.jar
- hibernate-spatial-4.0-M1.jar
- jdbc-stdext-2.0.jar
- jts-1.12.jar
- postgis-jdbc-1.5.3.jar
- postgresql-8.4-701.jdbc4.jar
我在经典 glassfish Java 应用程序上使用相同的库来存储空间特征,因此它们可以组合在一起。 postgresql 数据库也通过 postgis 在空间上启用,之前已使用经典的 java 应用程序进行了测试。
我将我的模型类扩展为 todo 任务如下:
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();
}
}
我还在我的 conf 文件中添加了 Postgis JPA 方言:
jpa.dialect=org.hibernate.spatial.dialect.postgis.PostgisDialect
Play 编译一切正常,有一些错误,当类路径中缺少库时,但我添加了上面列出的一个又一个,直到不再出现错误。然而,没有触发新位置字段的数据库演变。似乎游戏忽略了我的应用程序的所有休眠空间特定部分。它的工作方式与之前的普通 todolist 应用程序相同。
我认为这与不同的hibernate版本有关(是使用hibernate3还是hibernate4播放?我可以升级到4吗?)。有这方面经验的人能否告诉我他使用的每个库的版本以及必须完成哪些配置设置?
更新:正如 Christopher 提到的,我将 ebean 和 jpa 混为一谈。所以我把 jpa-sample 转移到我简单的 todolist 样本上。我更新了 play 项目文件和依赖项,重新连接了模型和控制器以适应 JPA EntityManager,并从类路径中删除了一些库,以便我使用 play 2.1 上的 hibernate 3。我也做了几乎就像在 jpa 示例中一样的配置,我的 persistence.xml 和 application.conf 几乎看起来一样,除了我使用 postgres 方言进行休眠。我可以编译我的项目,但是当我启动它时,我得到了
PersistenceException: [PersistenceUnit: defaultPersistenceUnit] 无法配置 EntityManagerFactory
我将 play 的详细程度配置为调试,所以我发现,在 PropertyBinder 构建我的任务实体的 id 属性之后会出现此异常。
我想我会更进一步,但看不到尽头......
【问题讨论】:
-
从您在克里斯托弗的回答下发表的评论中,我可以看到您现在已经完全弄清楚了。您能否在新答案中分享您的模板(或至少重要的配置部分)?
-
我现在还有一个问题。对我的实体和数据库演化进行建模非常清楚,但问题是,几何对象不会持久保存到数据库中(几何列是空的)。因为我没有时间,我还没有调试它,但我认为它只是一个小错误。当我解决这个问题后,我会将模板作为 JPA 空间示例放在 github 上。
标签: hibernate playframework-2.0 hibernate-spatial