我正在使用 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 目录中添加了一些库,即:
- hibernate-commons-annotations-4.0.1.Final.jar
- hibernate-core-4.1.9.Final.jar
- 休眠空间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吗?)。已经对此有经验的人可以告诉我他使用的每个库的版本以及必须完成的配置设置吗?
更新:正如克里斯托弗所提到的,我把 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 属性后会出现此异常。
想我更进一步,但看不到尽头......