我正在使用Spring mvc Web应用程序,需要在其中使用Hibernate创建城镇。以下是我的城镇模型。
@Entity
@Table(name="town")
public class TownModel {
@Id
@Column(name="townid")
@GeneratedValue
private Integer townId;
@Column(name="name")
private String townName;
@Column(name="desc")
private String townDesc;
@ManyToOne(optional = true)
@JoinColumn(name="districtid")
private DistrictModel districtModel;
}
我还有一个名为区的实体。镇是区的一部分,一个区可以有多个镇。以下是我的区域模型:
@Entity
@Table(name="district")
public class DistrictModel {
@Id
@Column(name="districtid")
@GeneratedValue
private Integer districtId;
@Column(name="name")
private String name;
@Column(name="desc")
private String description;
@OneToMany(mappedBy = "districtModel", fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<TownModel> townModelList;
}
我正在使用以下Hibernate代码保存城镇:
Session session = sessionFactory.getCurrentSession();
session.save(townModel);
但是显示错误:
21:22:08,104 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http--127.0.0.1-9090-1) SQL Error: 1064, SQLState: 42000
21:22:08,112 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http--127.0.0.1-9090-1) 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 'desc, name) values (2, 'Test town desc.', 'Test town')' at line 1
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'desc, name) values (2, 'Test town desc.', 'Test town')' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_45]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.7.0_45]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_45]
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) ~[na:1.7.0_45]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.Util.getInstance(Util.java:360) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:978) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2141) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2077) ~[com.mysql.jdbc_5.1.5.jar:na]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2062) ~[com.mysql.jdbc_5.1.5.jar:na]
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493) ~[na:na]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:186) ~[hibernate-core-4.2.16.Final.jar:4.2.16.Final]
... 64 common frames omitted
错误消息指出:
您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ desc,名称”值(2,“ Test town
desc。”,“ Test town”)附近使用
问题是在生成的查询中,由于使用了desc
它,因为它是MySQL中的保留字。
可能的解决方案:
description
。与做类似name
。@Column(name="`desc`")
IMO虽然选项3是一种快速而肮脏的解决方案,但我发现选项1是将来使用数据库的最佳解决方案。
我试图创建一个存储过程,但不断出现错误: #1064年的今天,您的SQL语法出现错误;查看与您的MySQL服务器版本对应的手册,以了解第3行“NOT DETERMINISTIC CONTAINS SQL SECURITY DEFINER COMMENT”“B”附近使用的正确语法 我的SQL如下: 我尝试过包含分隔符,但没有结果。我想问题可能出在引号里。有人能给我指出解决办法吗?谢谢 MySQL 5
我正在运行以下SQL语法: 但不管用。我得到了这个错误: 错误1064(42000):您的SQL语法中有错误;查看与您的MySQL server版本相对应的手册,了解第1行“DISTINCT >”Number of Employees“FROM Hours”附近使用的正确语法 你能告诉我我在哪里做错了吗?对不起,我对MySQL和数据库不熟悉。
我正在使用laravel auth。在注册页面中,用户需要填写姓名、电子邮件和密码才能创建帐户。稍后,用户可以编辑他的个人资料帐户,并插入更多信息,如地址、城市、邮政编码等,但创建帐户只需要它的名字、姓氏、电子邮件和密码。 我使用laravel auth使用下面的代码构建上面的逻辑,但是我在填写表单并单击“创建帐户”后收到错误: SQLSTATE[HY000]:一般错误:1364字段“facebo
问题内容: 我有一个MySQL命令: 当我运行它时,我得到一个错误: 问题答案: 是不是 您应该使用SQL工具来可视化可能出现的错误,例如 MySQL Workbench 。
问题内容: 这个问题已经在这里有了答案 : 由于在MySQL中使用保留字作为表或列名而导致的语法错误 (1个答案) 3年前关闭。 我已经浏览了所有其他StackOverflow(和Google)中相同问题的帖子,但似乎都没有解决我的问题。 我正在使用PDO和PHP。 我的代码: 而第一个print_r给 这是预期的(没有一个为空) 但它输出错误 SQLSTATE [42000]:语法错误或访问冲突
问题内容: 我不断收到此错误: MySQL说:#1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第15行“ INSERT INTO books.book(isbn10,isbn13,title,edition,author_f_name,author_m_na’‘ 与此查询: 知道是什么问题吗? 问题答案: 也许您忘记在此代码行之后添加“ ”: