Java 如何序列化一组枚举?

Java 如何序列化一组枚举?,java,hibernate,jpa,orm,spring-data,Java,Hibernate,Jpa,Orm,Spring Data,是否可以在没有自定义属性转换器的情况下序列化一组枚举 @Entity public class SomeEntity { @Id @GeneratedValue private Integer id; private Set<DayOfWeek> days; } @实体 公共类实体{ @身份证 @生成值 私有整数id; 私人设定日; } 天数集必须与某个实体位于同一个表中 我在Hibernate4.3.1中使用SpringDataJPA1.9

是否可以在没有自定义属性转换器的情况下序列化一组枚举

@Entity
public class SomeEntity {

    @Id
    @GeneratedValue
    private Integer id;

    private Set<DayOfWeek> days;

}
@实体
公共类实体{
@身份证
@生成值
私有整数id;
私人设定日;
}
天数集必须与某个实体位于同一个表中

我在Hibernate4.3.1中使用SpringDataJPA1.9。
谢谢。

枚举可序列化为超级接口(请参阅)


因此,它不应该对Hibernate(不需要序列化)或Spring数据JPA有任何特定的问题。

Enum可以序列化为超级接口(请参阅)


因此,Hibernate(不需要序列化)或Spring数据JPA不应该有任何特定的问题。

Hibernates存储声明实现
可序列化的类型的所有属性

但是
属性的类型是
,它不扩展
可序列化
。要将集合存储为序列化值,您需要声明一个集合类,该集合类实现了
Serializable
——与大多数方法一样。例如
HashSet

@Entity
public class SomeEntity {

    private HashSet<DayOfWeek> days;

}
@实体
公共类实体{
私人散列日;
}
您不需要任何进一步的注释。这适用于
Enum
和所有其他可序列化元素


但是对于一组枚举存在另一个选项:使用枚举集,它将值存储到整数列中(每个枚举值正好是一位)。请参见我的回答:

Hibernates存储所有声明实现可序列化类型的属性

但是
属性的类型是
,它不扩展
可序列化
。要将集合存储为序列化值,您需要声明一个集合类,该集合类实现了
Serializable
——与大多数方法一样。例如
HashSet

@Entity
public class SomeEntity {

    private HashSet<DayOfWeek> days;

}
@实体
公共类实体{
私人散列日;
}
您不需要任何进一步的注释。这适用于
Enum
和所有其他可序列化元素


但是对于一组枚举存在另一个选项:使用枚举集,它将值存储到整数列中(每个枚举值正好是一位)。请参见我的答案:

是。那个么,当你们尝试它时会发生什么呢?我得到这个异常:org.hibernate.MappingException:无法确定java.util.Set的类型,在表:some_entity中,对于列:[org.hibernate.mapping.Column(days)],我尝试用ddl auto=create启动应用程序并获得异常。是的,我的意思是“持久化”。我不想编写一个自定义属性转换器,用于将设置的天数转换为字符串并返回。@Lob将显式地用Java将字段序列化为1列。我使用的JPA实现甚至不需要它,因为除了序列化到单个列中的Java之外,没有其他方法可以持久化它。显然,您可以使用ElementCollection将它们放入联接表中。那个么,当你们尝试它时会发生什么呢?我得到这个异常:org.hibernate.MappingException:无法确定java.util.Set的类型,在表:some_entity中,对于列:[org.hibernate.mapping.Column(days)],我尝试用ddl auto=create启动应用程序并获得异常。是的,我的意思是“持久化”。我不想编写一个自定义属性转换器,用于将设置的天数转换为字符串并返回。@Lob将显式地用Java将字段序列化为1列。我使用的JPA实现甚至不需要它,因为除了序列化到单个列中的Java之外,没有其他方法可以持久化它。很明显,您可以使用ElementCollection将它们放在联接表中我得到了这个异常:org.hibernate.MappingException:无法确定类型:java.util.Set,在表中:some_entity,用于列:[org.hibernate.mapping.Column(days)]哪些注释(OneToMany、JoinColumn、Column…)已经用字段“days”设置了?添加了@Column(name=“days”)并获得相同的异常。请尝试使用JoinTable(单向关系)代替Column@atao他明确指出:必须与某个实体在同一个表中我得到这个异常:org.hibernate.MappingException:无法确定java.util.Set的类型,在table:some_entity中,列:[org.hibernate.mapping.Column(天)]您使用字段“天”设置了哪些批注(OneToMany、JoinColumn、Column…)?添加了@Column(name=“days”)并获得了相同的异常。请尝试使用JoinTable(单向关系)代替Column@atao他明确表示:必须与某个实体在同一张桌子上