org.hibernate.exception.SQLGrammarException:无法执行查询

时间:2010-11-03 03:13:46

标签: java hibernate hibernate-mapping playframework

我使用play框架!!但是,当我运行我的项目时,它会给我这个

org.hibernate.exception.SQLGrammarException:无法执行查询

谁能帮助我?

这是我的模特:

package models;
import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;
import play.db.jpa.Model;

@Entity
@Table(name="GxkAccount")
public class GxkAccount extends Model {

    private String Account;
    private String Psw;

    public String getAccount() {
        return Account;
    }
    public void setAccount(String account) {
        Account = account;
    }
    public String getPsw() {
        return Psw;
    }
    public void setPsw(String psw) {
        Psw = psw;
    }

    public static List<GxkAccount> GetList()
    {
        List<GxkAccount> infoList=GxkAccount.findAll();
        return infoList;
    }


}

3 个答案:

答案 0 :(得分:4)

您完全缺少类的属性的映射注释。

P.S。请尝试关注Java naming conventions

答案 1 :(得分:1)

使用mysql,我们也遇到了这类问题。我们在play框架application.conf中找到了:

jpa.dialect=org.hibernate.dialect.PostgreSQLDialect

我们用

替换了它
jpa.dialect=org.hibernate.dialect.MySqlDialect.

这解决了这个问题。如果您遇到此问题,可以尝试此配置设置。

答案 2 :(得分:0)

我们也遇到了同样的问题。我们在xml中创建,在id列上创建@GeneratedValue。解决方案是删除@GeneratedValue注释并手动设置ID的值,默认情况下,jpa也需要long,因此请提供长值,例如1l

按照其他规则执行自动生成。

与JPA相关的自动生成ID的问题解决如下:

修改Person.java模型类,使其具有Id属性的以下注释:

@Id
@TableGenerator(name="TABLE_GEN",table="T_GENERATOR",pkColumnName="GEN_KEY",pkColumnValue="TEST",valueColumnName="GEN_VALUE",initialValue=1,allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE, generator="TABLE_GEN")
public Long Id;

这将在名为T_GNERATOR的mysql架构中创建一个表,它将跟踪Id和JPA的下一个值,而hibernate知道如何检索此值。假设Id的初始值为1,并且每次插入时都会增加1,这从注释的属性中可以明显看出。