आप हाइबरनेट प्रकार निर्भरता का उपयोग करके इन प्रकारों को मेवेन सेंट्रल के माध्यम से आसानी से प्राप्त कर सकते हैं:
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>${hibernate-types.version}</version>
</dependency>
यदि आप निम्न कस्टम प्रकार का उपयोग करके आसानी से Java Enum को PostgreSQL Enum कॉलम प्रकार में मैप करते हैं:
public class PostgreSQLEnumType extends org.hibernate.type.EnumType {
public void nullSafeSet(
PreparedStatement st,
Object value,
int index,
SharedSessionContractImplementor session)
throws HibernateException, SQLException {
if(value == null) {
st.setNull( index, Types.OTHER );
}
else {
st.setObject(
index,
value.toString(),
Types.OTHER
);
}
}
}
इसका उपयोग करने के लिए, आपको हाइबरनेट @Type
. के साथ फ़ील्ड को एनोटेट करना होगा एनोटेशन जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
@Entity(name = "Post")
@Table(name = "post")
@TypeDef(
name = "pgsql_enum",
typeClass = PostgreSQLEnumType.class
)
public static class Post {
@Id
private Long id;
private String title;
@Enumerated(EnumType.STRING)
@Column(columnDefinition = "post_status_info")
@Type( type = "pgsql_enum" )
private PostStatus status;
//Getters and setters omitted for brevity
}
यह मैपिंग मानती है कि आपके पास post_status_info
. है PostgreSQL में एनम प्रकार:
CREATE TYPE post_status_info AS ENUM (
'PENDING',
'APPROVED',
'SPAM'
)
बस, यह एक आकर्षण की तरह काम करता है। यहाँ GitHub पर एक परीक्षण है जो इसे साबित करता है।