JPA 1.0 Hibernate&Derby HashMap with a Enum key usage



我正在寻找使用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的确如此。

最新更新