2016-03-11 80 views
0

我有以下字段聲明:如何檢查無效數據在數據庫中枚舉

@Entity 
@Table 
public class ConnectionInformation implements Serializable { 
    @Enumerated(EnumType.STRING) 
    @Column 
    private ConnectionType connectionType; 
    .... 
} 

在數據庫connectionTypevarchar領域用戶可以鍵入任何字符串那裏。

我有一個要求,如果用戶在此字段輸入錯誤,我應該記錄特定的錯誤。

當我從數據庫讀取實體時,如何在java代碼中檢查它?

現在我的DAO方法拋出

Unknown name value [trololo] for enum class [package.ConnectionType] 
    .... 
    'org.springframework.dao.InvalidDataAccessApiUsageException' exception. 

恐怕我不能依賴於異常的類型。可以爲另一個字段拋出異常。

回答

1

我認爲,這將是更好的,如果你映射connectionTypeString

@Entity 
@Table 
public class ConnectionInformation implements Serializable { 

    @Column 
    private String connectionType; 

    @Transient 
    public ConnectionType getConnectionTypeAsEnum() { 
     return connectionType == null ? null : ConnectionType.valueOf(connectionType); 
    } 

    public void assertConnectionType() { 
     try { 
      getConnectionTypeAsEnum(); 
     } catch(IllegalArgumentException ex) { 
      throw new IllegalArgumentException(
       String.format("Invalid `connectionType`: %s", conectionType), ex); 
     }  
    } 

}