当前位置: 首页 > 面试题库 >

如何在JPA中使用枚举

武友樵
2023-03-14
问题内容

我有一个电影租借系统的现有数据库。每部电影都有一个评级属性。在SQL中,他们使用约束来限制此属性的允许值。

CONSTRAINT film_rating_check CHECK 
    ((((((((rating)::text = ''::text) OR 
          ((rating)::text = 'G'::text)) OR 
          ((rating)::text = 'PG'::text)) OR 
          ((rating)::text = 'PG-13'::text)) OR 
          ((rating)::text = 'R'::text)) OR 
          ((rating)::text = 'NC-17'::text)))

我认为使用Java枚举将约束映射到对象世界会很好。但是由于“ PG-13”和“ NC-17”中的特殊字符,不可能简单地获取允许的值。因此,我实现了以下枚举:

public enum Rating {

    UNRATED ( "" ),
    G ( "G" ), 
    PG ( "PG" ),
    PG13 ( "PG-13" ),
    R ( "R" ),
    NC17 ( "NC-17" );

    private String rating;

    private Rating(String rating) {
        this.rating = rating;
    }

    @Override
    public String toString() {
        return rating;
    }
}

@Entity
public class Film {
    ..
    @Enumerated(EnumType.STRING)
    private Rating rating;
    ..

使用toString()方法,方向enum-> String可以正常工作,但是String-> enum不能正常工作。我得到以下异常:

[TopLink警告]:2008.12.09 01:30:57.434–
ServerSession(4729123)-异常[TOPLINK-116](Oracle TopLink Essentials-2.0.1(Build
b09d-fcs(12/06/2007))):
oracle.toplink.essentials.exceptions.DescriptorException异常描述:[FILM.RATING]字段中没有为值[NC-17]提供转换值。映射:oracle.toplink.essentials.mappings.DirectToFieldMapping
[rating-> FILM.RATING]描述符:RelationalDescriptor(de.fhw.nsdb.entities.Film->
[DatabaseTable(FILM)])

干杯

提摩


问题答案:

听起来您需要添加对自定义类型的支持:

扩展OracleAS
TopLink以支持自定义类型转换



 类似资料:
  • 我有一个模型,其枚举字段定义为: ClassificationEnum的定义如下: 在存储库类中,当我尝试使用Type2分类获取模型时,我得到了以下错误: 没有枚举常数[...]。产品分类 2也是包含我的枚举的类的id(可能它不相关),但我不知道为什么JPA会试图以这种方式访问我的枚举。

  • 问题内容: 我正在尝试将Postgres自定义类型(名为transmission_result)映射到Hibernate / JPA POJO。postgres自定义类型或多或少是字符串值的枚举类型。 我创建了一个名为PGEnumUserType的自定义EnumUserType以及一个表示postgres枚举值的枚举类。当我对一个真实的数据库运行它时,我收到以下错误:’ERROR:列“状态”的类型

  • Go语言中是否有枚举的简单实现?像下面这样的东西?

  • 非常感谢您在广告方面的帮助。! 使用枚举类型的扫描仪时出错。然而,我不允许在这个任务中使用Buffer(InputStreamReader)。围绕它最好的工作是什么? 我收到以下错误: 代码: import java.util.Scanner; 公开课申请{ }

  • 我试图在Spring JPA中查询findBy...它给我一个java.util.NoSuchElementExctive。这是我的代码: 产品类型: 控制器: ServiceImpl: 服务: 提供者(这是存储库): 我看不出我做错了什么...

  • 问题内容: 我们有一个带有postgres枚举的postgres数据库。我们开始在应用程序中构建JPA。我们也有Java枚举,它反映了postgres枚举。现在最大的问题是如何让JPA一方面理解Java枚举,另一方面理解Postgres枚举?Java方面应该很容易,但是我不确定如何进行postgres方面。 问题答案: 这涉及进行多个映射。 首先,JDBC驱动程序将Postgres枚举作为PGOb