gpt4 book ai didi

java - 如何在 JPA 中使用枚举

转载 作者:IT老高 更新时间:2023-10-28 20:53:15 24 4
gpt4 key购买 nike

我有一个电影租赁系统的现有数据库。每部电影都有一个评级属性。在 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 Warning]: 2008.12.09 01:30:57.434--ServerSession(4729123)--Exception [TOPLINK-116] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DescriptorException Exception Description: No conversion value provided for the value [NC-17] in field [FILM.RATING]. Mapping: oracle.toplink.essentials.mappings.DirectToFieldMapping[rating-->FILM.RATING] Descriptor: RelationalDescriptor(de.fhw.nsdb.entities.Film --> [DatabaseTable(FILM)])

干杯

提莫

最佳答案

您是否尝试过存储序数值。如果您没有与值关联的字符串,则存储字符串值可以正常工作:

@Enumerated(EnumType.ORDINAL)

关于java - 如何在 JPA 中使用枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/352586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com