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 注释是不是总是产生一对多的关系?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以通过 ElementCollection 查询 JPA 实体,其中 ElementCollection 包含给定元素集中的所有元素?
JPA @ElementCollection 我该如何查询?