我使用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;
}
}
答案 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,这从注释的属性中可以明显看出。