如何使用 Hibernate 映射集合 Map<String,List<String>> 类型

UtsavC

问题是使用 Hibernate 保留以下类。

Public class Album{
Private int albumid;
Private String aname;
Private Map<String,List<String>> photos;
}

我试过这个

@Entity
public class Album {
    @Id
    private int albumId;
    @Column(name= "Album_Name")
    private String aname;
    
    @ElementCollection
    @MapKeyColumn(name= "Event_Name")
    @Column(name="Values")
    private Map<String, List<String>> photos;

但它显示错误,例如


    Exception in thread "main" org.hibernate.MappingException: Could not determine type for: java.util.List, at table: Album_photos, for columns: [org.hibernate.mapping.Column(Values)]
        at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336)
        at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310)
        at org.hibernate.mapping.Collection.validate(Collection.java:315)
        at org.hibernate.mapping.IndexedCollection.validate(IndexedCollection.java:89)
        at org.hibernate.cfg.Configuration.validate(Configuration.java:1362)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
        at com.wipro.Insert.main(Insert.java:17)

戴维德

此映射在 Hibernate ORM 中不起作用。

原因是您正在尝试拥有两个嵌套的元素集合,而 Hibernate ORM 不支持此功能(第一个集合是 the Map,第二个集合是 the List)。

您必须使用实体。

您可以通过@ElementCollection以下映射获得类似于的内容:


@Entity
public static class PhotoEvent {
    @Id
    @Column(name = "Event_Name")
    public String eventName;

    @ElementCollection
    @Column(name = "`Values`")
    public List<String> values;

    @ManyToOne
    public Album album;
...
// getter/setter/hascode/equals...
}


@Entity
public static class Album {
    ...
    
    @OneToMany(mappedBy = "album", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    @MapKey(name = "eventName")
    public Map<String, PhotoEvent> photoEvents;
    
    ...
}

请注意,我设置FetchType.EAGER是因为它模拟了一个,@ElementCollection但您可能希望将其设置为LAZY(默认值)。

您将在 Hibernate ORM 文档中找到有关此类映射的更多详细信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Hibernate中映射Map <String,List <Foo >>

Hibernate OGM 映射一个 Map<String, Object> 元素集合

如何在Scala中将类型为Map [String,Map [String,Any]]的嵌套映射转换为JSON?

如何使用Google集合将List <String>转换为Map <String,String>?

如何使用Google集合将Map <String,String>转换为List <String>

使用输入作为键映射器将String集合转换为Map

如何在 Java 8 中创建 Map<Integer, Map<String, Integer>> 类型的映射?

如何使用 Map[List[String], String]?

如何映射Map <String,Double>

转到:强制转换类型无法将map [string] interface {}映射到map [string] string

将Map <String,List <>>与List <>映射

类型 'List<dynamic>' 不是类型 'Map<String, dynamic>' 的子类型

List <dynamic>类型不是'Map <String,dynamic>'类型的子类型

类型 List<dynamic> 不是类型 Map<String dynamic> 的子类型

如何解决“List<Map.Entry<String,String>>类型的values()方法未定义”

如何修复:“Map<String, dynamic>”类型的值,但得到“List<dynamic>”类型之一

颤振类型转换为 List<Map<String, String>>

Scala如何在以下列表中与Map [String,Double]类型的Maps相交:List [Map [String,Double]]

Hibernate如何在@OneToMany映射中找到集合的通用类型?

如何定义对应于Map [String,Option [String]]的类型?

使用map [string] int作为map [interface {}] interface {}类型的参数

解组映射到map [string] interface {}后,对ma [string] [] string的类型断言失败

使用流过滤 List<Map<String, String>>

错误:List <dynamic>不是Map <String,dynamic>类型的子类型

如何从Dart中的List <Map <String,String >>创建List <String>?

如何将 List<String[]> 放入 Map<String, List<String>>

如何使用map [string] * string

颤振:类型 'List<Map<String, Object>>' 不是类型转换中类型 'List<Map<String, int>>' 的子类型

JPA Map <String,String>映射