枚举Java未保存为带枚举注释的字符串

时间:2015-05-21 14:34:28

标签: java jpa enums

我无法创建枚举以在MySQL DB中保存为字符串。 我有一个带有字段的MySQL表:

status varchar(50)

枚举

public enum Status {OPEN, CLOSED, CANCELLED, DONE}

实体

@Column(name="status", nullable=false)
private Status status;

@Enumerated(EnumType.STRING)
public Status getStatus() {return status;}

当我启动应用程序时,我在获取数据时出现以下错误: SQLException:getInt()' OPEN'

的值无效

另外我无法创建实体,我有一个SQLGrammarError。它尝试使用status = OPEN而不是status =' OPEN'来保存对象。

我按照文档JavaDoc Persistence Enum 并尝试了这个tutorial Jpa and Enums

通过在属性状态上添加@Enumerated(EnumType.STRING)。提取错误不存在,但我仍然有相同的错误来创建实体。

错误记录

[DEBUG] com.vallois.valcrm.web.rest.BusinessResource - REST request to save         Business : Business{id=null, name='test', description='okokok',     createUpdateInfo=CreateUpdateInfo{createdUsername='user', updatedUsername='null',  createdDate=Thu May 21 16:04:54 CEST 2015, updatedDate=null}, status=CLOSED,  lock=PUBLIC}
Hibernate: insert into BUSINESS (created_date, created_name, updated_date, u pdated_name, description, lock, name, status, user_id) values (?, ?, ?, ?, ?, ?,    ?, ?, ?)
[WARN] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1064, SQLState: 42000
[ERROR] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'lock, name, status, user_id) values ('2015-05-21 16:04:54', 'user', null, null, ' at line 1

2 个答案:

答案 0 :(得分:7)

@Enumerated移至字段

@Column(name="status", nullable=false)
@Enumerated(EnumType.STRING)
private Status status;

修改

您获得的例外与枚举无关。 lock是MySQL中的reserved word,您必须将其名称更改为其他内容。

答案 1 :(得分:1)

JPA允许在字段或属性上进行注释,其中@Id的位置指定考虑哪两个。

所以在这种情况下,我猜你必须将@Enumerated(EnumType.STRING)移到现场。