gpt4 book ai didi

java - JPA:@ElementCollection 和 InheritanceType.TABLE_PER_CLASS -> 重复的列名

转载 作者:行者123 更新时间:2023-11-30 05:59:45 25 4
gpt4 key购买 nike

我创建了以下场景:

@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class MyEntity implements Serializable{
@Id
@GeneratedValue
protected Long id;
...
@ElementCollection
@CollectionTable(name="ENTITY_PARAMS")
@MapKeyColumn (name = "ENTITY_KEY")
@Column(name = "ENTITY_VALUE")
protected Map<String, String> parameters;
...
}

还有:

@javax.persistence.Entity
public class Sensor extends MyEntity{
@Id
@GeneratedValue
protected Long id;
...

// so here "protected Map<String, String> parameters;" is inherited !!!!
...
}

所以运行这个例子,没有创建表,我得到以下消息:

WARNUNG: Got SQLException executing statement "CREATE TABLE ENTITY_PARAMS (Entity_ID BIGINT NOT NULL, ENTITY_VALUE VARCHAR(255), ENTITY_KEY VARCHAR(255), Sensor_ID BIGINT NOT NULL, ENTITY_VALUE VARCHAR(255))": com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate column name 'ENTITY_VALUE'

我还尝试覆盖 Sensor 类的属性...

@AttributeOverrides({
@AttributeOverride(name = "ENTITY_KEY", column = @Column(name = "SENSOR_KEY")),
@AttributeOverride(name = "ENTITY_VALUE", column = @Column(name = "SENSOR_VALUE"))
})

...但同样的错误。

编辑:

好的,我发现使用继承策略“JOINED”以及“SINGLE_TABLE”一切正常。此外,它似乎与 EclipseLink 版本无关 - 我尝试了 1.3 和 2.0.1。

END_EDIT

谁能帮帮我?

最佳答案

好的,我刚刚发现出了什么问题!

在我构建的这种情况下,您应该不能使用@CollectionTable(name="ENTITY_PARAMS")注释。

所以,只要使用...@元素集合 @MapKeyColumn (name = "PARAM_KEY") @Column(名称 = "PARAM_VALUE") 私有(private) map 参数;

一切正常,结果表(在 MySQL 中)是:

CREATE TABLE Sensor_PARAMETERS (
Sensor_ID BIGINT NOT NULL,
PARAM_VALUE VARCHAR(255),
PARAM_KEY VARCHAR(255)
)

CREATE TABLE Entity_PARAMETERS (
Entity_ID BIGINT NOT NULL,
PARAM_VALUE VARCHAR(255),
PARAM_KEY VARCHAR(255)
)

因此,如果没有该属性,一切正常......希望,没有人需要这篇文章。即使:“恭喜你,你找到了答案!” ;-)

关于java - JPA:@ElementCollection 和 InheritanceType.TABLE_PER_CLASS -> 重复的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2465420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com