2012-03-21 94 views
1

我找到了一個論壇。 Using enum as idJPA通過`@ IdClass`使用`Enum`作爲`@ Id`

但我不知道我是否可以做到。我認爲我的情況有點不同。

enum Type { 
} 

class MyEntityId { 
    String type; 
    String key; 
} 

@Entity 
@IdClass(MyEntityId.class) 
class MyEntity { 

    @Enumerated(EnumType.String) 
    @Id 
    Type type; 

    @Id 
    String key; 
} 

這是真的合法嗎?
如果是這樣,我可以不用擔心供應商特定的行爲嗎?

回答

2

爲什麼不閱讀鏈接的問題?它引用規範(2.1.4)並且說NO不能有Enum類型的id字段;不要緊,你有一些(無效的)IdClass(因爲IdClass的類型必須與類的類型相匹配)。所以它不是JPA規範的一部分,所以你只剩下特定於供應商的行爲。

+1

這是在2016年仍然有效? – narko 2016-04-05 11:04:54

+0

從最新版本的Hibernate 4開始,它仍然有效。 – Tadhg 2018-02-04 01:18:24

1

在休眠4中,您可以在IdClass中使用Enum作爲@Id,但只能作爲Ordinal使用。您添加枚舉的任何@Convert標記都將被忽略。

你可以做的是使用@EmbeddedId來獲得同樣的效果

@Embeddable 
class MyEntityId { 

    @Enumerated(EnumType.String) 
    Type type; 
    String key; 
} 

@Entity 
class MyEntity { 

    @EmbeddedId 
    MyEntityId id; 
}