Jax rs java.lang.ClassCastException:java.lang.String不能强制转换为java.lang.Enum

Jax rs java.lang.ClassCastException:java.lang.String不能强制转换为java.lang.Enum,jax-rs,eclipselink,jpa-2.0,payara,java-ee-8,Jax Rs,Eclipselink,Jpa 2.0,Payara,Java Ee 8,我在尝试将实体“UserAccount”持久化到数据库表中时遇到此错误 @Entity @Table(name = "user_account") public class UserAccount extends BaseEntity { @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "useraccount_id") @MapKeyEnumerated(EnumType.STRING) private Map

我在尝试将实体“UserAccount”持久化到数据库表中时遇到此错误

@Entity
@Table(name = "user_account")
public class UserAccount extends BaseEntity {

  @OneToMany(cascade = CascadeType.ALL)
  @JoinColumn(name = "useraccount_id")
  @MapKeyEnumerated(EnumType.STRING)
  private Map<PhoneType, PhoneNumber> phones = new HashMap<PhoneType, PhoneNumber>();

  //... other attributes
  //... default constructor, getters and setters
}
最后

public class UserAccountRepository {

    @Inject
    EntityManager entityManager;

    @Override
    public UserAccount save(UserAccount userAccount) {
        if (userAccount.getId() == null) {
            entityManager.persist(userAccount);
        } else {
            userAccount = entityManager.merge(userAccount);
        }
        return userAccount;
    }

  //.. other methods
}
其他有相同错误的问题建议在类型Enum的属性上添加@Enumerated(EnumType.STRING),我在电话地图上使用了
@MapKeyEnumerated(EnumType.STRING)
,但我仍然看到这个错误。有什么线索表明我错在哪里吗


如果我没有按照SO指南提出问题,请告诉我,我会更正它(因为这是我的第一个问题)。

我对
电话号码
类做了如下更改

@Entity
@Table(name = "phone_number")
public class PhoneNumber extends BaseEntity {

  private PhoneType type;
  private String areaCode;
  private String number;

  //... default constructor, getters and setters
}

然后在
用户帐户中添加
@MapKey(name=“type”)
,如下所示

@OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "useraccount_id")
    @MapKeyEnumerated(EnumType.STRING)
    @MapKey(name = "type")
    private Map<PhoneType, PhoneNumber> phones = new HashMap<PhoneType, PhoneNumber>();

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name=“useraccount\u id”)
@MapKeyEnumerated(EnumType.STRING)
@映射键(name=“type”)
私有映射电话=新的HashMap();

通过这些更改,我现在能够成功地将UserAccount对象保存到db表中。

我对
PhoneNumber
类做了如下更改

@Entity
@Table(name = "phone_number")
public class PhoneNumber extends BaseEntity {

  private PhoneType type;
  private String areaCode;
  private String number;

  //... default constructor, getters and setters
}

然后在
用户帐户中添加
@MapKey(name=“type”)
,如下所示

@OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "useraccount_id")
    @MapKeyEnumerated(EnumType.STRING)
    @MapKey(name = "type")
    private Map<PhoneType, PhoneNumber> phones = new HashMap<PhoneType, PhoneNumber>();

@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name=“useraccount\u id”)
@MapKeyEnumerated(EnumType.STRING)
@映射键(name=“type”)
私有映射电话=新的HashMap();
通过这些更改,我现在能够成功地将UserAccount对象保存到db表中

@OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "useraccount_id")
    @MapKeyEnumerated(EnumType.STRING)
    @MapKey(name = "type")
    private Map<PhoneType, PhoneNumber> phones = new HashMap<PhoneType, PhoneNumber>();