簡體   English   中英

枚舉Java未保存為帶枚舉注釋的字符串

[英]Enum Java Not saved as Strings with Enumerated Annotation

我無法創建枚舉以在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 編寫了教程Jpa和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

@Enumerated移動到該字段

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

編輯

您獲得的例外與枚舉無關。 lock是MySQL中的保留字 ,你必須將它的名字改為其他東西。

JPA允許在字段或屬性上進行注釋,其中@Id的位置指定考慮兩者中的哪一個。

所以在這種情況下,我猜你必須將@Enumerated(EnumType.STRING)移動到該字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM