我有以下字段声明:

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


在数据库connectionTypevarchar字段中,用户可以在其中键入任何字符串。

我有一个要求,如果用户在此字段中键入错误,我应该记录特定的错误。

从数据库读取实体时,如何在Java代码中检查它?

现在我的道方法抛出

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


恐怕我不能依赖异常类型。可以为另一个字段抛出异常。

最佳答案

我认为,如果将connectionType映射为String类型会更好

@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);
        }
    }

}

10-04 18:13