5

我正在尝试存储一个Map<String, List<String>>;使用 JPA。

我的实体看起来像:

@Entity
@Table(name = "Profiles_table")
public class Profiles {

    @Id
    @Column(name = "profile_ID", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    private final HashMap<String, List<String>> AllProfiles;
    ...
}

我已经为地图尝试了很多设置,但它不起作用......

我尝试的最后一个:

@ElementCollection
@MapKeyColumn(name = "Profil")
@Column(name = "Permissions")
@CollectionTable(name = "Profiles_permissions", joinColumns = @JoinColumn(name = "profile_ID"))

抛出以下异常:

org.hibernate.AnnotationException: Illegal attempt to map a non collection as a
@OneToMany, @ManyToMany or @CollectionOfElements: [...]Profiles.AllProfiles

提前致谢

4

3 回答 3

1

字符串不是实体,因此您不应该使用@OneToMany 等...

你试过这个:

@CollectionOfElements
private Map<String, List<String>> allProfiles;
于 2013-02-01T15:01:03.990 回答
1

不是一个真正的答案,但这是我做的方式。

我将第二级集合存储为 blob。

@Entity
@Table(name = "Profiles_table")
public class Profiles {

@Id
@Column(name = "profile_ID", updatable = false, nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int                                 id;

@Column(length = 16777210)
private final HashMap<String, Set<String>>  AllProfiles;
于 2013-04-16T15:13:09.873 回答
0

您是否尝试过将 AllProfiles 声明为接口类型(比如说 Map)?注释 ConcurrentHashMap 时,在休眠中检查“非法尝试将非集合映射为 @OneToMany、@ManyToMany 或 @CollectionOfElements”

于 2013-01-31T15:44:58.007 回答