JPA @ElementCollection 注释是不是总是产生一对多的关系?

Posted

技术标签:

【中文标题】JPA @ElementCollection 注释是不是总是产生一对多的关系?【英文标题】:Does JPA @ElementCollection annotation always produce an one-to-many relationship?JPA @ElementCollection 注释是否总是产生一对多的关系? 【发布时间】:2011-09-29 03:49:27 【问题描述】:

对于这个问题,请考虑以下示例:

@Entity
public class File 
    public static enum Permission  READABLE, WRITEABLE, EXECUTABLE 

    @ElementCollection
    @Enumerated(EnumType.ORDINAL)
    Set<Permission> permissions;

    // Omitted

假设枚举值以序数形式存储,JPA 是否总是为这个集合创建一个额外的表?我可以更改它以使其不是一对多关系,即使用列而不是额外的表吗?

谢谢。

【问题讨论】:

【参考方案1】:
    “一对多”是一种实体关联。这是一个值的集合,因此不能是一对多的。 实际上不可能将多个值存储在单行的单个字段中,所以不,您不能这样做。 本质上,您要求的是基本属性,例如private String permissions;。这将使用同一个表中的单个列。 如果您想将多个值打包成一个值,例如在 Hibernate 保存时手动将所有权限组合成一个逗号分隔的字符串,您需要编写一个 custom UserType 来执行此操作。李>

【讨论】:

我的错。我的意思是一对多,而不是一对一。 @ElementCollection 在后台(数据库级别)执行此操作。我期待结果类似于答案 4。谢谢。 好吧,同样的事情也适用于一对多。它用于建立实体关系,而不是映射简单的值。不过,我很高兴你找到了你要找的东西。

以上是关于JPA @ElementCollection 注释是不是总是产生一对多的关系?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 JPA 注释映射哈希图

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

JPA @ElementCollection 我该如何查询?

查询中的 JPA 基本类型 ElementCollection 计算值

JPA - 多对多作为 ElementCollection

查询@ElementCollection JPA