如何使用 Hibernate 将 ENUM 数据类型从数据库正确映射到 Spring Data JPA 实体?
我在我的数据库模式中定义了一个 ENUM 类型,并且我将 Spring Data JPA 与 Hibernate 用于我的 Java 应用程序。我想将此 ENUM 类型映射到 JPA 实体类中的属性,但从数据库获取数据时遇到数据完整性问题。
这是我在数据库中的 ENUM 定义:
ENUM('EQUIPOS', 'CUENTAS', 'WIFI', 'INTERNET', 'SOFTWARE')
以下是我定义相应 Java 枚举的方式:
public enum TipoEnum {
EQUIPOS,
CUENTAS,
WIFI,
INTERNET,
SOFTWARE
}
我的 JPA 实体类如下所示:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// How do I properly map this ENUM type to my database column?
private TipoEnum tipo;
// Getters and setters...
}
当我尝试使用 Spring Data JPA 存储库从数据库中获取数据时,我收到与数据完整性违规相关的错误。看起来 Hibernate 正在尝试错误地映射 ENUM 值。
如何使用 Spring Data JPA 和 Hibernate 将 ENUM 类型从数据库正确映射到 JPA 实体类?我需要使用任何特定的注释或配置来确保正确的映射并防止数据完整性问题吗?
发现由于数据库中的 ENUM 数据类型,出现错误 Value 'EQUIPOS' is out of valid range for type java.lang.Byte。 创建了一个 Java 枚举 TipoEnum 来表示数据库中存在的 ENUM 值。 已验证数据库中的 ENUM 值为“EQUIPOS”、“CUENTAS”、“WIFI”、“INTERNET”、“SOFTWARE”。 确保 Java 中的 TipoEnum 枚举与数据库中的 ENUM 值匹配。 研究错误消息以了解根本原因。
您应该使用@Enumerated(EnumType.STRING)注释,这将使用文字值作为字符串。这是一个例子:
@Enumerated(EnumType.STRING)
private TipoEnum tipo;
在这里您可以获得更多信息:https://tomee.apache.org/examples-trunk/jpa-enumerated/