首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate OneToMany / ManyToOne导致SQLGrammarException

问Hibernate OneToMany / ManyToOne导致SQLGrammarException
EN

Stack Overflow用户
提问于 2015-05-19 08:57:05
回答 1查看 444关注 0票数 1

我在两个表之间有一个OneToMany / ManyToOne关系。表Partition中有一个外键引用id of Event。当我调用event.getPartitions() (应该返回一个Event中包含所有Partitions的列表)时,我会得到以下异常:

代码语言:javascript
复制
Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax.

dialect设置为org.hibernate.dialect.MySQL5Dialect,driver class设置为com.mysql.jdbc.Driver。

getPartitions:

代码语言:javascript
复制
@XmlTransient
@OneToMany(mappedBy = "event")
public Collection<Partition> getPartitions()
{
    return partitions;
}

getEvent:

代码语言:javascript
复制
@XmlTransient
@ManyToOne
@JoinColumn(name = "event_id", referencedColumnName = "id", nullable = false)
public Event getEvent()
{
    return event;
}

事件:

代码语言:javascript
复制
DROP TABLE IF EXISTS `event`;
CREATE TABLE `event` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(1024) NOT NULL,
  `description` varchar(1024) DEFAULT NULL,
  `img` varchar(1024) DEFAULT NULL,
  `date` date DEFAULT NULL,
  `location` varchar(1024) DEFAULT NULL,
  `information` varchar(1024) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

分区:

代码语言:javascript
复制
DROP TABLE IF EXISTS `partition`;
CREATE TABLE `partition` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `event_id` int(11) NOT NULL,
  `title` varchar(1024) DEFAULT NULL,
  `description` varchar(1024) DEFAULT NULL,
  `active_timestamp` datetime DEFAULT NULL,
  `position` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `event_id` (`event_id`),
  CONSTRAINT `event_partition` FOREIGN KEY (`event_id`) REFERENCES `event` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

下面的查询被原谅了,在我看来也不错:

代码语言:javascript
复制
10:44:04,708 INFO  [stdout] (default task-4) Hibernate: select event0_.id as id1_1_0_, event0_.date as date2_1_0_, event0_.description as descript3_1_0_, event0_.img as img4_1_0_, event0_.information as informat5_1_0_, event0_.location as location6_1_0_, event0_.title as title7_1_0_ from Event event0_ where event0_.id=?
10:44:04,818 INFO  [stdout] (default task-4) Hibernate: select partitions0_.event_id as event_id6_1_0_, partitions0_.id as id1_2_0_, partitions0_.id as id1_2_1_, partitions0_.active_timestamp as active_t2_2_1_, partitions0_.description as descript3_2_1_, partitions0_.event_id as event_id6_2_1_, partitions0_.position as position4_2_1_, partitions0_.title as title5_2_1_ from Partition partitions0_ where partitions0_.event_id=?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-19 09:02:53

Partition在MySQL中是保留字,将表名更改为其他(实体名称可以保持不变,只需使用@Table注释来配置新的表名)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30321026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档