[英]Hibernate enum mapping
我需要事先將未實現接口的枚舉映射到現有數據庫,現有數據庫使用@Enumerated(EnumType.STRING)
將枚舉存儲在與所有者類相同的表中。
class A {
HasName name;
}
interface HasName {
String getName();
}
enum X implements HasName {
John, Mary;
public String getName() { return this.name(); }
}
enum Y implements HasName {
Tom, Ann;
public String getName() { return this.name(); }
}
在這種情況下應該如何處理映射? 持久化到數據庫不會改變,因為實現接口的所有枚舉都會有不同的值,但我不確定如何從數據庫中檢索對象(我是否需要一個自定義映射器,它將嘗試實例化一個枚舉使用指定的枚舉類?Hibernate本身是否支持此功能?)。
Hibernate提供org.hibernate.type.EnumType
來映射枚舉類型。 例如,
package com.igalia.enumerates;
public enum Status {
BUSY,
AVAILABLE;
}
package com.igalia.entities;
class MyClass {
private Status status;
}
然后,按如下方式進行Hibernate映射:
<class name="MyClass">
<id name="id">
<generator class="native"/>
</id>
<property name="status">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.igalia.enumerates.Status</param>
</type>
</property>
</class>
就是這樣。 如果您更喜歡使用JPA注釋而不是hbm.xml,請使用@Enumerated(EnumType.STRING)。 在這里查看:
可以創建自定義UserType
(例如這個 )並從映射中使用它
<property name="type" not-null="true">
<type name="at.molindo.util.hibernate.EnumUserType">
<param name="enumClass">
com.example.MyEnum
</param>
</type>
</property>
編輯:Hibernate附帶了它自己的EnumType(因為3.2在hibernate-annotations中,因為hibernate-core中的3.6 - 在編寫本文時並不知道它是在hibernate-annotations中,但是看到Diego的答案 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.