我正在寻找使用JPA映射HashMap的帮助,JPA是这样构建的。.<NflTeam, Integer>
。NflTeam是所有可能的NFL球队的枚举。地图的值在这个阶段并不重要。
我尝试过,没有在实体类中的哈希映射字段上使用任何注释,但我发现当我尝试更新映射时,我会得到以下错误:
错误org.hibernate.util.JDBCExceptionReporter-截断错误在尝试收缩VARCHAR()FOR BIT DATA(二进制数据)时遇到未显示的值)'到长度255。5371[AWT-EventQueue-0]错误org.hibernate.event.def.AbstractFlushingEventListener-无法将数据库状态与会话同步
我还尝试将以下注释添加到实体类@ElementCollection
中的字段中,因为我看到一些地方说这是用于映射哈希映射的注释,但我发现当我尝试映射实体时会出现以下错误:
由:org.hubinate.AnnotationException引起:非法尝试映射非集合为@OneToMany、@ManyToMany或@CollectionOfElements:ie.madden.stats.core.beans.Player.teamsPlayedWithMap
有人知道在JPA中使用正确的注释来映射通用化的hashmap(由构造)吗?
提前感谢
编辑::
这是我的persistence.xml文件:
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="MaddenStatsPU" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <class>ie.madden.stats.core.beans.Player</class> <class>ie.madden.stats.core.beans.Fixture</class> <properties>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="false"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:maddenstats;create=true"/>
<property name="javax.persistence.jdbc.password" value="madden"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.user" value="madden"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect"/>
<property name="hibernate.default_schema" value="MaddenStats"/> </properties> </persistence-unit> </persistence>
其次,这里是我为Player创建的实体类,其中使用了hashmap:
@Entity
public class Player implements IEntityBean
{
@Id
@GeneratedValue(generator="id_Gen")
@SequenceGenerator(name="id_Gen", sequenceName="id_Seq")
private Long playerId;
private String name;
private Long played = new Long(0);
private Long wins = new Long(0);
private Long losses = new Long(0);
private Integer winPercentage = new Integer(0);
private HashMap<NflTeam, Integer> teamsPlayedWithMap = new HashMap<>();
}
在上面的示例中,我已经删除了我尝试映射HashMap的任何尝试。
哦,NflTeam是一个枚举,就像我已经说过的,它是所有NFL球队的枚举。。。
JPA1没有为这样的Map提供支持。您必须了解具体的实施情况。JPA2的确如此。