【问题标题】: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 是否总是为这个集合创建一个额外的表?我可以更改它以使其不是一对多关系,即使用列而不是额外的表吗?

谢谢。

【问题讨论】:

    标签: java jpa orm persistence jpa-2.0


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

    【讨论】:

    • 我的错。我的意思是一对多,而不是一对一。 @ElementCollection 在后台(数据库级别)执行此操作。我期待结果类似于答案 4。谢谢。
    • 好吧,同样的事情也适用于一对多。它用于建立实体关系,而不是映射简单的值。不过,我很高兴你找到了你要找的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多