如何在 Hibernate 中将对象注释为字符串映射
How to annotate an Object to String Map in Hibernate
我有两个对象:Entity 和 Secondary。
实体包含从中到字符串的映射。它还有一个组合键。
我有使用 JDO 的映射,但现在是(过去)转移到 JPA 的时候了。
我不知道如何编写注释来使其工作,
数据库中有三个表包含数据。
desc map_table
Name Null Type
---------- -------- ------------
ENTITYID NOT NULL VARCHAR2(12)
ENTITYSOURCE NOT NULL NUMBER(1)
SECONDARYID NOT NULL VARCHAR2(20)
VALUE NOT NULL VARCHAR2(16)
desc entity
Name Null Type
---------- -------- ------------
ID NOT NULL VARCHAR2(12)
SOURCE NOT NULL NUMBER(1)
.....
desc secondary
Name Null Type
---------- -------- ------------
ID NOT NULL VARCHAR2(12)
name NUMBER(1)
我是运行 Hibernate 4.2.19
主要class:
@Entity
@Table(name="ENTITY")
public class Entity
{
@EmbeddedId
private EntityKey key;
@SomehtingIHavntFiguredOut
private Map<Secondary, String> domainConfig = new HashMap<Secondary, String>();
}
这是我留下的 JDO 映射:
<field name="map" table="MAP_TABLE" default-fetch-group="true">
<map key-type="com.foo.Secondary" value-type="String" />
<join>
<column name="ENTIYID" target="ID"/>
<column name="ENTITYSOURCE" target="SOURCE"/>
</join>
<key>
<column name="SECONDARYID"/>
</key>
<value>
<column name="VALUE"/>
</value>
我的解决方案
@ElementCollection
@CollectionTable(name="MAP_TABLE", joinColumns={
@JoinColumn(name="entityid",referencedColumnName="id"),
@JoinColumn(name="entitysource",referencedColumnName="source")
})
@MapKeyJoinColumn(name="secondaryid")
@Column(name = "VALUE")
private Map<Secondary, String> domainConfig = new HashMap<Secondary, String>();
我不清楚什么时候使用@ElementCollection,什么时候使用@OneToMany。我认为因为这些值是基元正确的注释是@ElementCollection.
我有两个对象:Entity 和 Secondary。 实体包含从中到字符串的映射。它还有一个组合键。
我有使用 JDO 的映射,但现在是(过去)转移到 JPA 的时候了。
我不知道如何编写注释来使其工作,
数据库中有三个表包含数据。
desc map_table
Name Null Type
---------- -------- ------------
ENTITYID NOT NULL VARCHAR2(12)
ENTITYSOURCE NOT NULL NUMBER(1)
SECONDARYID NOT NULL VARCHAR2(20)
VALUE NOT NULL VARCHAR2(16)
desc entity
Name Null Type
---------- -------- ------------
ID NOT NULL VARCHAR2(12)
SOURCE NOT NULL NUMBER(1)
.....
desc secondary
Name Null Type
---------- -------- ------------
ID NOT NULL VARCHAR2(12)
name NUMBER(1)
我是运行 Hibernate 4.2.19
主要class:
@Entity
@Table(name="ENTITY")
public class Entity
{
@EmbeddedId
private EntityKey key;
@SomehtingIHavntFiguredOut
private Map<Secondary, String> domainConfig = new HashMap<Secondary, String>();
}
这是我留下的 JDO 映射:
<field name="map" table="MAP_TABLE" default-fetch-group="true">
<map key-type="com.foo.Secondary" value-type="String" />
<join>
<column name="ENTIYID" target="ID"/>
<column name="ENTITYSOURCE" target="SOURCE"/>
</join>
<key>
<column name="SECONDARYID"/>
</key>
<value>
<column name="VALUE"/>
</value>
我的解决方案
@ElementCollection
@CollectionTable(name="MAP_TABLE", joinColumns={
@JoinColumn(name="entityid",referencedColumnName="id"),
@JoinColumn(name="entitysource",referencedColumnName="source")
})
@MapKeyJoinColumn(name="secondaryid")
@Column(name = "VALUE")
private Map<Secondary, String> domainConfig = new HashMap<Secondary, String>();
我不清楚什么时候使用@ElementCollection,什么时候使用@OneToMany。我认为因为这些值是基元正确的注释是@ElementCollection.