Play 2.4中的Hibernate Entity问题

时间:2015-05-01 19:30:00

标签: java hibernate playframework-2.0

我正在尝试在Play 2.4中使用JPA,但它在每一步都是错误的,其中没有一个似乎有很好的记录。

我在这里有一个测试实体:

@Entity
@Table(name="testit")
public class TestModel {

    @Id
    private long id;
    private String title;

    public TestModel(String title) {
        this.title = title;
    }

    public long getId() {
        return id;
    }

    public String getTitle() {
        return this.title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

因为我会经常更新和创建实体,所以我在persistence.xml使用此属性:

<property name="hibernate.hbm2ddl.auto" value="create"/>

我正在努力学习如何实际坚持这个实体。这是我到目前为止在我的一个控制器中所得到的:

@Transactional
public static Result runExperiment() {
    TestModel tester = new TestModel("testingasdf");
    JPA.em().persist(tester);
    return ok();
}

当我第一次运行它时,它运行得很好,我验证了数据库中的条目。但是当我第二次运行它时,我收到错误消息:

a.d.Dispatcher - EntityManager is closed

在类似的说明中,我看到的示例在id上有这样的符号,因此它不会经常尝试插入0作为id:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;

但是当我尝试这个时,我会遇到这样的错误:

o.h.t.h.SchemaExport - HHH000389: Unsuccessful: drop table testit if exists
o.h.t.h.SchemaExport - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'if exists' at line 1
o.h.t.h.SchemaExport - HHH000389: Unsuccessful: create table testit (id bigint generated by default as identity, title varchar(255), primary key (id))
o.h.t.h.SchemaExport - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'generated by default as identity, title varchar(255), primary key (id))' at line 1

老实说,我在这一点上有点迷失,试图弄清楚如何设置这样一个简单的实体。网络上的所有建议都建议使用JPA而不是eBeans,但我不知道......

1 个答案:

答案 0 :(得分:0)

事实证明,教程Play帖子特定于他们的H2数据库系统。作为一个菜鸟,我错过了你需要告诉Hibernate使用什么方言的事实。在persistence.xml中,我将方言行更改为:

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>

似乎我的问题现在已经解决了。