我有三张桌子
CREATE TABLE IF NOT EXISTS `tag` (
`id` INT NOT NULL AUTO_INCREMENT,
`tag` VARCHAR(127) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `entry` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(511) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `entry_tag_list` (
`entry_id` INT NOT NULL,
`tag_id` INT NOT NULL,
PRIMARY KEY (`entry_id`, `tag_id`),
CONSTRAINT `entry_id`
FOREIGN KEY (`entry_id`)
REFERENCES `entry` (`id`),
CONSTRAINT `tag_id`
FOREIGN KEY (`tag_id`)
REFERENCES `tag` (`id`)
);
Entry
和Tag
个对象
条目包含以下列方式注释的标签列表
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "entry_tag_list", joinColumns = {
@JoinColumn(referencedColumnName = "id", nullable = false)}, inverseJoinColumns = {
@JoinColumn(referencedColumnName = "id", nullable = false)})
private List<Tag> tags;
但每当我尝试运行代码并执行简单的get时,我都会收到错误
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'tags2_.tags_id' in 'on clause'
当我做
时会发生这种情况sessionFactory.getCurrentSession().createCriteria(aClass).list();
不幸的是,我无法将标记和条目的列名重命名为id
,因此我无法关注在线发布的任何示例。
我究竟做错了什么?
答案 0 :(得分:1)
我们将从此错误开始
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'tags2_.tags_id' in 'on clause'
所以hibernate正在 entry_tag_list 中搜索 tags_id ,但根据你的Mysql映射, tag_id 。
现在,当我看到您的 ManyToMany 配置时,我没有看到为tag_id定义的任何名称
所以这一行正在创造问题
private List<Tag> tags;
Hibernate正在做的是采用变量名称并附加&#34; _id&#34;对它,因为你还没有定义。
因此,您可以添加名称来引用或更改列表变量
private List<Tag> tag;