'on clause' 中的未知列多对多失败

Many to many fails with Unknown column in 'on clause'

我有三张表

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`)
);

以及EntryTag个对象。
条目包含以下列方式注释的标签列表

@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;

但是每当我尝试 运行 代码并执行简单的获取时,我都会收到一条错误消息

Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'tags2_.tags_id' in 'on clause'

当我这样做时它确实发生了

sessionFactory.getCurrentSession().createCriteria(aClass).list();

不幸的是,我无法将标签和条目的列名称从 id 重命名,因此我无法遵循在线发布的任何示例。

我到底做错了什么?

我们将从这个错误开始

Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'tags2_.tags_id' in 'on clause'

因此休眠正在 entry_tag_list 中搜索 tags_id 但根据您的 Mysql映射它是 tag_id.

现在,当我看到您的 ManyToMany 配置时,我没有看到为 tag_id

定义的任何名称

所以这条线造成了问题

private List<Tag> tags;

Hibernate 正在做的是获取 变量名称并向其附加“_id”,因为您尚未定义。

因此,您可以添加一个 name 来引用或将 List 变量更改为

private List<Tag> tag;