'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`)
);
以及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;
但是每当我尝试 运行 代码并执行简单的获取时,我都会收到一条错误消息
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;
我有三张表
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;
但是每当我尝试 运行 代码并执行简单的获取时,我都会收到一条错误消息
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;