2010-02-02 7 views
6

सुबह।हाइबरनेट इकाई में कई स्तंभों द्वारा इंडेक्स को कैसे परिभाषित किया जाए?

मुझे हाइबरनेट इकाई में अनुक्रमण जोड़ने की आवश्यकता है। जैसा कि मुझे पता है कि अलग कॉलम के लिए इंडेक्स निर्दिष्ट करने के लिए @ इंडेक्स एनोटेशन का उपयोग करना संभव है लेकिन मुझे इकाई के कई क्षेत्रों के लिए एक अनुक्रमणिका की आवश्यकता है।

मैंने गुगल किया है और jboss एनोटेशन @Table पाया है, जो इसे (विनिर्देशन द्वारा) करने की अनुमति देता है। लेकिन (मुझे नहीं पता क्यों) यह कार्यक्षमता काम नहीं करती है। हो सकता है कि jboss संस्करण आवश्यक से कम हो, या हो सकता है कि मैं इस एनोटेशन का उपयोग कैसे करें, लेकिन जटिल सूचकांक नहीं बनाया गया है।

क्यों इंडेक्स नहीं बनाया जा सकता है?

jboss संस्करण 4.2.3.GA

इकाई उदाहरण:

package somepackage; 
import org.hibernate.annotations.Index; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 

@Entity 
@org.hibernate.annotations.Table(appliesTo = House.TABLE_NAME, 
    indexes = { 
      @Index(name = "IDX_XDN_DFN", 
        columnNames = {House.XDN, House.DFN} 
      ) 
    } 
) 

public class House { 
    public final static String TABLE_NAME = "house"; 
    public final static String XDN = "xdn"; 
    public final static String DFN = "dfn"; 

    @Id 
    @GeneratedValue 
    private long Id; 

    @Column(name = XDN) 
    private long xdn; 

    @Column(name = DFN) 
    private long dfn; 

    @Column 
    private String address; 

    public long getId() { 
     return Id; 
    } 

    public void setId(long id) { 
     this.Id = id; 
    } 

    public long getXdn() { 
     return xdn; 
    } 

    public void setXdn(long xdn) { 
     this.xdn = xdn; 
    } 

    public long getDfn() { 
     return dfn; 
    } 

    public void setDfn(long dfn) { 
     this.dfn = dfn; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 
} 

jboss/हाइबरनेट तालिका "घर" बनाने के लिए प्रयास करता है यह अपवाद निम्नलिखित थ्रो:

Reason: org.hibernate.AnnotationException: @org.hibernate.annotations.Table references an unknown table: house 
+1

btw, तुम रूप में स्वीकार किया (वोट नीचे टिक) जवाब चिह्नित करने के लिए, अगर वे आप सूट अपेक्षा की जाती है। – Bozho

+0

@foobar - क्या आपने अपनी समस्या का समाधान किया? – Bozho

+0

मैं एसक्यूएल स्क्रिप्ट का उपयोग कर मैन्युअल रूप से इंडेक्स बनाने का इरादा रखता हूं। आपका सुझाव सही है लेकिन मुझे लगता है कि यह एक हैक की तरह है जो उपयोगकर्ता हाइबरनेट अप्राच के रूप में उपयोग करते हैं। और यह विधि किसी अन्य दृढ़ता प्रदाता के लिए योग्य नहीं हो सकती है। समस्या हल हो गई है लेकिन भविष्य में मैं यह समझने के लिए थोड़ा और समय बिताना चाहता हूं कि इस कार्य को सर्वोत्तम तरीके से कैसे किया जाए। मैं यहां परिणाम के बारे में लिखूंगा ... बहुत बहुत धन्यवाद। –

उत्तर

-1

आप ' एक समग्र प्राथमिक कुंजी के साथ बेहतर जाना है।

This article बताता है कि जेपीए एनोटेशन के साथ इसे कैसे किया जाए। यह का उपयोग करता है @Embeddable और @EmbeddedId

+0

धन्यवाद। जेपीए विशिष्ट एपीआई का प्रयोग सही बात है लेकिन ... यह अभी भी स्पष्ट नहीं है कि यह jboss पर क्यों काम नहीं करता है। मैंने अलग-अलग फ़ील्ड के लिए @ इंडेक्स एनोटेशन निर्दिष्ट करने वाले एक ही कक्षा का उपयोग करने की कोशिश की है लेकिन यह भी काम नहीं करता है। –

+0

क्या आपने लेख पढ़ा था? 'एम्बेड करने योग्य 'और' एम्बेडेड आईडी 'का प्रयोग करें। – Bozho

+0

मेरे व्यापार तर्क में इकाई को एम्बेड करने योग्य नहीं है। अधिक सरल निर्णय होना चाहिए। लेकिन अभी तक यह नहीं पता कि यह कैसे करें .... हां, मैंने वह लेख पढ़ लिया है। –

14

कृपया कोशिश निम्नलिखित:

@Index(name = "index1") 
public String getFoo(); 

@Index(name = "index1") 
public String getBar(); 

:

@Entity 
@org.hibernate.annotations.Table(appliesTo = House.TABLE_NAME, 
    indexes = { 
      @Index(name = "IDX_XDN_DFN", 
        columnNames = {House.XDN, House.DFN} 
      ) 
    } 
) 
@Table(name="house") 
public class House { 
    ... 
} 

ध्यान दें कि यह भी आप एक बहु-स्तंभ सूचकांक (सूचकांक नाम के आधार पर) बनाने के लिए अनुमति चाहिए पीएस: हाइबरनेट का कौन सा संस्करण आप बीटीडब्ल्यू का उपयोग कर रहे हैं? डेटाबेस/बोली क्या है?

1

आपको hibernate.hbm2ddl.auto को persistence.xml में बनाने के लिए सेट करना होगा। जब हाइबरनेट अपडेट करने के लिए सेट किया गया है तो इंडेक्स नहीं बनाएगा।

hibernate.hbm2ddl.auto = create

+0

मैंने आपको उदास करने की कोशिश की है, लेकिन इंडेक्स नहीं बनाए गए थे –

+0

यह हो सकता है कि यह jboss संस्करण –

+0

की वजह से ऐसा लगता है कि यह सामान्य रूप से सत्य नहीं है; मेरे लिए सूचकांक 'hibernate.hbm2ddl.auto = update' के साथ भी बनाए गए थे। –

संबंधित मुद्दे