Java JPA@ElementCollection注释是否总是产生一对多关系? 对于这个问题,考虑下面的样本: @Entity public class File { public static enum Permission { READABLE, WRITEABLE, EXECUTABLE } @ElementCollection @Enumerated(EnumType.ORDINAL) Set<Permission> permissions; // Omitted } @实体 公共类文件{ 公共静态枚举权限{可读、可写、可执行} @元素集合 @枚举(EnumType.ORDINAL) 设置权限; //省略 }

Java JPA@ElementCollection注释是否总是产生一对多关系? 对于这个问题,考虑下面的样本: @Entity public class File { public static enum Permission { READABLE, WRITEABLE, EXECUTABLE } @ElementCollection @Enumerated(EnumType.ORDINAL) Set<Permission> permissions; // Omitted } @实体 公共类文件{ 公共静态枚举权限{可读、可写、可执行} @元素集合 @枚举(EnumType.ORDINAL) 设置权限; //省略 },java,jpa,orm,persistence,jpa-2.0,Java,Jpa,Orm,Persistence,Jpa 2.0,假设枚举值以顺序形式存储,JPA是否总是为此集合创建额外的表?我是否可以修改它以使其不是一对多关系,即使用列而不是额外的表 谢谢 “一对多”是一种实体关联。这是一组值,因此不能是一对多 物理上不可能在一行中的一个字段中存储多个值,所以不能让它这样做 本质上,您需要的是一个基本属性,比如私有字符串权限。这将在同一个表中使用单个列 如果您想将多个值打包成一个值,比如在Hibernate保存时手动将所有权限合并成一个逗号分隔的字符串,那么您需要编写一个命令来完成此操作 我的错。我指的是一对多,不是一对

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

谢谢

  • “一对多”是一种实体关联。这是一组值,因此不能是一对多
  • 物理上不可能在一行中的一个字段中存储多个值,所以不能让它这样做
  • 本质上,您需要的是一个基本属性,比如
    私有字符串权限。这将在同一个表中使用单个列
  • 如果您想将多个值打包成一个值,比如在Hibernate保存时手动将所有权限合并成一个逗号分隔的字符串,那么您需要编写一个命令来完成此操作

  • 我的错。我指的是一对多,不是一对一@ElementCollection在后台(DB级别)执行此操作。我期待的结果与答案4类似。谢谢,一对多也是一样的。它用于构建实体关系,而不是映射简单的值。不过,我很高兴你找到了你想要的东西。