如何将Enum值作为带有Hibernate的String存储到SQL Server?

时间:2016-05-13 05:17:54

标签: sql string hibernate persistence enumeration

所以我在Entity bean中有一个Enum属性:

@Entity
@Table(name = "fileAttachment")
public class FileAttachment

// other properties..

@Enumerated(EnumType.STRING)
FileAttachmentType type;

// getters and setters

但是,当我持久化bean时,该列中的值显示为0或1或2之类的数字。

如果println在使用EntityManager持久化bean之前枚举的值,则该值将打印为String,例如INVOICE,但在SQL Server表中该行的值为2,例如在fileAttachmentType-column上。我还需要配置什么?我认为EnumType.STRING可以解决问题。

2 个答案:

答案 0 :(得分:1)

您是自己在DB中创建表还是依赖于Hibernate? 如果首先确保列类型适合存储字符串。 如果第二次尝试使用注释,如

@Column(columnDefinition = "enum('VALUE1','VALUE2')")

答案 1 :(得分:0)

好的,在这种情况下,当我添加注释时,事情就解决了:@Enumerated(EnumType.STRING)

到该字段的getter而不是实际字段。 在另一个项目中,当注释在场上而不是其他任何地方时它起作用......所以,就我而言,答案是好的旧的"由于某种原因",但它现在有效。 / p>

如果有人会对此进行评论,我会更新答案。

编辑:原因被发现了。在Entity类中的getter上已经有一个注释。这就是为什么字段上的注释不起作用的原因。碰巧是这样,你应该只在字段上注释或仅在getter上注释。两者都没有注释。