许多人在“' on”条款中使用“未知”列失败。

时间:2017-11-08 02:46:01

标签: mysql sql hibernate many-to-many hibernate-mapping

我有三张桌子

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;

但每当我尝试运行代码并执行简单的get时,我都会收到错误

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

当我做

时会发生这种情况
sessionFactory.getCurrentSession().createCriteria(aClass).list();

不幸的是,我无法将标记和条目的列名重命名为id,因此我无法关注在线发布的任何示例。

我究竟做错了什么?

1 个答案:

答案 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;