2009-06-09 6 views
7

हल नहीं कर सकता है मैं हाइबरनेट संदर्भ से उदाहरण बनाने का प्रयास कर रहा हूं।हाइबरनेट त्रुटि: तालिका

मुझे सरल टेबल मिल गया है आईडी, नाम और आयु फ़ील्ड के साथ छात्र। मैंने सभी जावा-बीन्स नियमों के अनुसार इसे सही (जैसा कि मुझे लगता है) जावा-क्लास बनाया है।

मैंने कॉन्फ़िगरेशन फ़ाइल - hibernate.cfg.xml बनाई है, बस संदर्भ से उदाहरण की तरह।

मैंने एक वर्ग के छात्र के लिए हाइबरनेट मैपिंग बनाई है, और यहां त्रुटि हुई है।

<hibernate-mapping> 
    <class name="Pupil" table="pupils"> 
     ... 
    </class> 
</hibernate-mapping> 

तालिका = "छात्र" मेरे आईडीई में लाल है और मुझे संदेश "तालिका विद्यार्थियों को हल नहीं कर सकता" संदेश दिखाई देता है। मैंने संदर्भ में बहुत अजीब नोट भी स्थापित किया है जो कहता है कि अधिकांश उपयोगकर्ता उदाहरण चलाने की कोशिश कर रहे एक ही समस्या से असफल हो जाते हैं।

आह .. मैं इस उदाहरण से बहुत नाराज हूं .. IMHO अगर लेखकों को पता है कि ऐसी समस्या है तो उन्हें इसके बारे में कुछ जानकारी जोड़नी चाहिए।

लेकिन, मुझे इसे कैसे ठीक करना चाहिए? मैं यहाँ चींटी से और अन्य उपकरणों के साथ उदाहरण के लिए उपयोग नहीं करना चाहता हूं। मैं MySQL 5.0 का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि इससे कोई फर्क नहीं पड़ता।

युपीडी: स्रोत कोड

Pupil.java - विन्यास - मेरी लगातार वर्ग

package domain; 

public class Pupil { 
    private Integer id; 
    private String name; 
    private Integer age; 

    protected Pupil() { } 

    public Pupil (String name, int age) { 
     this.age = age; 
     this.name = name; 
    } 

    public Integer getId() { 
     return id; 
    } 

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

    public String getName() { 
     return name; 
    } 

    public void setName (String name) { 
     this.name = name; 
    } 

    public Integer getAge() { 
     return age; 
    } 

    public void setAge (Integer age) { 
     this.age = age; 
    } 

    public String toString() { 
     return "Pupil [ name = " + name + ", age = " + age + " ]"; 
    } 
} 

Pupil.hbm.xml इस वर्ग

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping package="domain" > 

    <class name="Pupil" table="pupils"> 
     <id name="id"> 
      <generator class="native" /> 
     </id> 
     <property name="name" not-null="true"/> 
     <property name="age"/> 
    </class> 
</hibernate-mapping> 

hibernate.cfg.xml के लिए मानचित्रण है हाइबरनेट

<hibernate-configuration> 
    <session-factory> 
     <!-- Database connection settings --> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="connection.url">jdbc:mysql://localhost/hbm_test</property> 
     <property name="connection.username">root</property> 
     <property name="connection.password">root</property> 

     <property name="connection.pool_size">1</property> 
     <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
     <property name="current_session_context_class">thread</property> 
     <property name="show_sql">true</property> 

     <mapping resource="domain/Pupil.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 

HibernateUtils.java

package utils; 

import org.hibernate.SessionFactory; 
import org.hibernate.HibernateException; 
import org.hibernate.cfg.Configuration; 

public class HibernateUtils { 
    private static final SessionFactory sessionFactory; 

    static { 
     try { 
      sessionFactory = new Configuration().configure().buildSessionFactory(); 
     } catch (HibernateException he) { 
      System.err.println (he); 
      throw new ExceptionInInitializerError (he); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

Runner.java - परीक्षण के लिए वर्ग हाइबरनेट

import org.hibernate.Session; 

import java.util.*; 

import utils.HibernateUtils; 
import domain.Pupil; 

public class Runner { 
    public static void main (String[] args) { 
     Session s = HibernateUtils.getSessionFactory().getCurrentSession(); 

     s.beginTransaction(); 
     List pups = s.createQuery ("from Pupil").list(); 
     for (Object obj : pups) { 
      System.out.println (obj); 
     } 
     s.getTransaction().commit(); 

     HibernateUtils.getSessionFactory().close(); 
    } 
} 

मेरे libs: antlr-2.7.6.jar, asm.jar, एएसएम-attrs .jar, cglib-2.1.3.jar, कॉमन्स-संग्रह-2.1.1.jar, कॉमन्स-लॉगिंग-1.0.4.jar, dom4j-1.6.1.jar, hibernate3.jar, jta.jar, log4j-1.2 .11.jar, mysql-connector-java-5.1.7-bin.jar

Compile error: cannot resolve table pupils

+0

विचार? jboss उपकरण? क्या आपको jboss टूल प्राथमिकताओं में कनेक्शन जानकारी कॉन्फ़िगर करने की आवश्यकता है? – Surya

+0

इंटेलिजे आईडीईए 7, हाइबरनेट 3.2, जेडीके 1.6। रुको, मैं कोड – Roman

उत्तर

17

इसका हाइबरनेट से कोई लेना देना नहीं है, यह एक आईडीईए "मुद्दा" है और आपको hbm.xml में टेबल नाम सत्यापन के लिए इसे ठीक से कॉन्फ़िगर करने की आवश्यकता है।this old thread से:

In order for IntelliJ to provide proper code completion and validation for database tables/columns, it needs to know about the database structure of your application as well. So, I'm referring to the IntelliJ datasource. Think of it as a "development-time datasource", or something like that.

To create one:
Window -> Tool Windows -> Data sources
Add ("plus" icon) -> JDBC data source

As an alternative, you could try the "Import" button in the "Date sources" tool window. This makes IntelliJ search your project for some specific configuration files (like "hibernate.cfg.xml"), from which it can directly import a datasource definition.

However, if that fails, you can always define a JDBC data source manually (jdbc url, driver jar, driver class, etc).

Once you have a datasource configured, test it by opening an SQL console on it ("console" button in datasource tool window), and type some queries. IDEA should provide SQL code completion here, for table and column names.

If this step works, go to the definition of the datasource, and invoke

"Refresh Tables". This makes IntelliJ retrieve the database structure.

Next, open "Project Structure" (Ctrl-Shift-Alt-S). Select your Hibernate facet (though either "Facets" or "Modules").

The options screen for the Hibernate facet has a pane named "DataSources Mapping". Here you can associate your Hiberante session factory with a specific IntelliJ datasource.

After this step, SQL table/column code completion and validation should work in .hbm files as well.

भी विचार 7 पर लागू होता, यदि आवश्यक हो तो पूरे धागा पढ़ें।

+0

जोड़ने की कोशिश करूंगा, मुझे पहले से ही वही उत्तर मिल गया है (जैसा कि आप देख सकते हैं कि लगभग एक साल पहले सवाल पूछा गया था)। लेकिन वैसे भी यह सही है। – Roman

+0

@Roman कोई समस्या नहीं :) दरअसल, "समुदाय" उपयोगकर्ता ने आज सुबह इस सवाल को उछाल दिया, इसलिए मैंने जवाब पोस्ट किया। ओह, और ऐसे मामले में, यदि आपको कोई समाधान मिल जाए, तो अपना जवाब पोस्ट करने और इसे स्वीकार करने के लिए स्वतंत्र महसूस करें। –

1

हमें आपकी मदद करने के लिए पर्याप्त जानकारी की आवश्यकता है।

क्या यह एक कमांड लाइन एप्लिकेशन है? क्या रनटाइम त्रुटि दी जाती है? आप किस आईडीई का उपयोग कर रहे हैं? हाइबरनेट के डीबग लॉगिंग को सक्षम करने से आउटपुट क्या है?

+0

जोड़ दूंगा यह संकलन त्रुटि है, आईडीई इंटेलिजे आईडीईए है, और यह एक प्रसिद्ध समस्या होनी चाहिए जैसा कि मैं संदर्भ से समझता हूं। – Roman

+0

कृपया अन्य प्रश्नों के उत्तर दें ताकि हम आपकी मदद कर सकें। और आपकी त्रुटि के बारे में: यह संकलित कोड नहीं है: .cfg.xml केवल एक कॉन्फ़िगरेशन फ़ाइल है। शायद अगर आप उस नमूने से लिंक करते हैं जिसका आप उपयोग कर रहे हैं? – DarkSquid

+0

असल में, मुझे नहीं पता कि आपको कोड कैसे दिखाना है। मुझे पूरा यकीन है कि कोड ठीक है और कुछ सेटिंग्स के साथ समस्या (या शायद मैंने कुछ नेसेकरी जार-फाइल खो दी है)। मैं कुछ – Roman

1

आपका आईडीई आपको बता रहा है कि यह तालिका नहीं ढूंढ सकता है। आप इसे आईडीईए में केवल एक चेतावनी में बदल सकते हैं ताकि आपकी परियोजना कम से कम संकलित हो जाएगी।

0

एक hbm.xml फ़ाइल मैपिंग को मान्य करने के लिए, बस निम्नलिखित (Intellij अंतिम 2017.1) कार्य करें:

View -> Tool Windows -> Database -> click (+) sign -> Data Source -> MySQL 

आप अपने डेटाबेस के सर्वर के लिए एक डेटा स्रोत जोड़ दिया है। अब आपको डेटास्रोत बनाना चाहिए। अगला चरण मैपिंग को हाइबरनेट करने के लिए इस डेटासोर्स को जोड़ रहा है। बस मेरा अनुसरण करें:

View -> Tool Windows -> Persistence 

दृढ़ता विंडो खोली जाएगी। आपको सूचीबद्ध परियोजना को देखना होगा। "सत्र फैक्टरी" और "डेटा स्रोत":

Right click on the project -> Assign Data Sources... 

खोला विंडो में, वहाँ 2 कॉलम होना चाहिए। बस दूसरे कॉलम में ऊपर परिभाषित डेटासोर्स जोड़ें।