使用@ElementCollection 时出错:org.hibernate.MappingException:无法确定类型:java.util.Set,在表中:列

Posted

技术标签:

【中文标题】使用@ElementCollection 时出错:org.hibernate.MappingException:无法确定类型:java.util.Set,在表中:列【英文标题】:Error while using @ElementCollection: org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: for columns 【发布时间】:2019-01-30 13:04:57 【问题描述】:

我有两张桌子NewsToolSearchCriteriaNewsToolSearchCriteria_NewsSource_RelationnewsToolSearchCriteriaId 是对NewsToolSearchCriteria (entityID) 的外键引用我想先从里面的第二个表中查看一组元素。

尝试这样设置:

@ElementCollection
@CollectionTable(name = "NewsToolSearchCriteria_NewsSource_Relation", joinColumns = @JoinColumn(name = "newsToolSearchCriteriaId"))
@Column(name = "newsSourceCode")
private Set<String> newsSources;

public Set<String> getNewsSources() 
    return newsSources;


public void setNewsSources(Set<String> newsSources) 
    this.newsSources = newsSources;

但一直收到错误:

嵌套异常是 org.hibernate.MappingException:无法确定类型:java.util.Set,在表:dbo.NewsToolSearchCriteria,列:[org.hibernate.mapping.Column(newsSources)]

我已经尝试过使用@Column(name = "newsSourceCode", columnDefinition = "NVARCHAR(30)")@ElementCollection(targetClass = String.class)

我已经看到了其他类似的问题,但我使用两个实体的情况并非如此,可以使用@OneToMany 解决。

任何想法如何解决这个问题?

【问题讨论】:

你的桌子NewsToolSearchCriteria_NewsSource_Relation怎么样?您可能想尝试@JoinTable 而不是@CollectionTable 【参考方案1】:

您只需在 getter 上添加注释而不是类参数。

我没有找到它说的地方,但他们在documentation 中使用它,它对我有用。

【讨论】:

以上是关于使用@ElementCollection 时出错:org.hibernate.MappingException:无法确定类型:java.util.Set,在表中:列的主要内容,如果未能解决你的问题,请参考以下文章

@ElementCollection 的 JPA 延迟加载

是否可以通过 ElementCollection 查询 JPA 实体,其中 ElementCollection 包含给定元素集中的所有元素?

JPA @ElementCollection 我该如何查询?

如何使用 Hibernate 获得 @ElementCollection 的总和?

如何在休眠中为@ElementCollection 设置表名

如何使用 @ElementCollection 进行 Set<Integer> 映射?