我创建了以下场景:
@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;
...
}
Run Code Online (Sandbox Code Playgroud)
以及:
@javax.persistence.Entity
public class Sensor extends MyEntity{
@Id
@GeneratedValue
protected Long id;
...
// so here "protected Map<String, String> parameters;" is inherited !!!!
...
}
Run Code Online (Sandbox Code Playgroud)
所以运行这个例子,没有创建表,我收到以下消息:
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'
Run Code Online (Sandbox Code Playgroud)
我也试过覆盖Sensor类的属性......
@AttributeOverrides({
@AttributeOverride(name = "ENTITY_KEY", column = @Column(name = "SENSOR_KEY")),
@AttributeOverride(name = "ENTITY_VALUE", column = @Column(name = "SENSOR_VALUE"))
})
Run Code Online (Sandbox Code Playgroud)
......但是同样的错误.
编辑:
好吧,我发现继承策略"JOINED"以及"SINGLE_TABLE"一切正常.它似乎与EclipseLink版本无关 - 我试过1.3和2.0.1.
END_EDIT
有谁能够帮我?
好的,我刚刚发现了什么问题!
在我构建的这种场景中,你应该不能使用@CollectionTable(name ="ENTITY_PARAMS")注释.
所以,只需使用... @ElementCollection @MapKeyColumn(name ="PARAM_KEY")@Column(name ="PARAM_VALUE")私有Map参数;
每个工作正常,结果表(在MySQL中)是:
CREATE TABLE Sensor_PARAMETERS (
Sensor_ID BIGINT NOT NULL,
PARAM_VALUE VARCHAR(255),
PARAM_KEY VARCHAR(255)
)
Run Code Online (Sandbox Code Playgroud)
和
CREATE TABLE Entity_PARAMETERS (
Entity_ID BIGINT NOT NULL,
PARAM_VALUE VARCHAR(255),
PARAM_KEY VARCHAR(255)
)
Run Code Online (Sandbox Code Playgroud)
所以,没有那个属性一切正常......希望,没有人需要这篇文章.即使:"祝贺你,你找到了答案!" ;-)
归档时间: |
|
查看次数: |
4841 次 |
最近记录: |