मैं निम्नलिखित "रूट" इकाई (हाइबरनेट-विशिष्ट भागों पर टिप्पणी की) हैअलग जेपीए संस्थाओं में तोड़ मरोड़
@Entity
//@GenericGenerator(name="system-uuid",strategy="org.hibernate.id.UUIDGenerator")
public class Node extends PersistentEntity {
private UUID id;
private String name;
private String displayName;
@Id
@GeneratedValue
//@GeneratedValue(generator="system-uuid") //instead of above line
//@Type(type = "pg-uuid")
public UUID getId() { return id; }
public String getName() { return name; }
public String getDisplayName() { return displayName; }
//stuff omitted
}
यह एक हठ संदर्भ 6 के रूप में JBoss पर तैनात का हिस्सा है (हाइबरनेट 3.6) डेटाबेस के लिए PostgreSQL 9 का उपयोग कर (नवीनतम जेडीबीसी 4 ड्राइवर का उपयोग कर)। (उपरोक्त कोड में बाहर टिप्पणी की) PostgreSQL अपनी ही UUID स्तंभ प्रकार है, जो कुछ हाइबरनेट विशिष्ट मैपिंग की आवश्यकता है ठीक से उपयोग करने की है - अन्यथा बाइनरी UUID क्षेत्र मैप करने के लिए कोशिश करेंगे हाइबरनेट, तो PostgreSQL बोली का समर्थन नहीं करता द्विआधारी (जाहिरा तौर पर क्योंकि पोस्टग्रे में द्विआधारी और हाइबरनेट देवों को संग्रहीत करने के 2 तरीके हैं) और पूरी चीज विस्फोट हो जाती है।
ऊपर लाइनों uncommenting कोड काम कर रहा है, लेकिन यह मेरे लिए मजबूर करता हाइबरनेट पर एक संकलन समय निर्भरता के लिए - जो मैं नहीं बल्कि बचने चाहते हैं।
मिश्रण में एक hbm.xml फ़ाइल जोड़ने का प्रयास और persistence.xml फ़ाइल और व्याख्याओं से डेटा मर्ज नहीं होता से संदर्भित है, लेकिन बस एनोटेशन पर ध्यान नहीं देता:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="package">
<class name="Node">
<id name="id" type="pg-uuid">
<generator class="org.hibernate.id.UUIDGenerator"/>
</id>
</class>
</hibernate-mapping>
मैं कर सकता हूँ "फुलाना "इस अतिरिक्त 2 गुण जोड़कर अप फ़ाइल, लेकिन फिर भी अगर मैं कि (जिस पर नोड वर्ग काम करता है इंगित) करते हैं, की तरह, किसी भी अतिरिक्त संस्थाओं को जोड़ने:
@Entity
public class Host extends Node {
//fields, getters, fluff
}
मैं निम्न अपवाद प्राप्त करें:
org.hibernate.DuplicateMappingException: Duplicate class/entity mapping Node
हाइबरनेट के बाद से "पाता है" नोड दो बार। क्या इस के आसपास कोई सुरुचिपूर्ण तरीका है? आदर्श रूप से, नोड एकमात्र वर्ग है जिसके लिए मुझे हाइबरनेट-विशिष्ट गुणों की आवश्यकता होगी, और यह कक्षाओं के बड़े पदानुक्रम की जड़ होगी। मैं एचबीएम.एक्सएमएल में पूरी तरह से हाइबरनेट या मैपिंग पर संकलन-समय निर्भरताओं से बचना चाहता हूं। पूर्णता 'खातिर, यहाँ persistence.xml फ़ाइल का उपयोग कर im है:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="myPU" transaction-type="JTA">
<jta-data-source>java:/my-postgresql-DS</jta-data-source>
<mapping-file>META-INF/hbm.xml</mapping-file>
<!-- shouldnt need to list classes here since this is deployed -->
<!-- in the same jar as the classes and scanning should work -->
<validation-mode>AUTO</validation-mode>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
मैं "जेपीए के साथ जावा हठ" (एक जेपीए 2.0 -book) की जाँच की है, लेकिन यह UUIDs के बारे में कुछ नहीं कहा, तो मुझे लगता है कि वे अभी तक जेपीए द्वारा समर्थित नहीं हैं। – esaj
उन्होंने कम से कम इस अर्थ में समर्थित किया है कि धारावाहिक योग्य कुछ भी समर्थित है (बाइनरी डेटा में अनुवाद करेगा)। लेकिन PostgreSQL + हाइबरनेट के साथ आपको यह भी प्राप्त नहीं होगा ... – radai