org.hibernate.hql.internal.ast.QuerySyntaxException: तालिका मैप नहीं की गई है


96

मेरे पास उदाहरण है वेब एप्लिकेशन हाइबरनेट 4.3.5 + डर्बी डेटाबेस 10.10.1.1+ ग्लासफिश 4.0 आईडीई नेटबेंस 8.0 गीता के साथ।

मेरे पास अगला अपवाद है:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: CUSTOMERV is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:95)
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:331)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3633)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3522)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:562)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:299)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:247)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
... 72 more 

Index.xhtml से फॉर्म

<h:panelGrid id="panel1" columns="2" border="1"
                 cellpadding="5" cellspacing="1">
        <f:facet name="header">
            <h:outputText value="Add Customer Information"/>
        </f:facet>
        <h:outputLabel value="First Name:"/>
        <h:inputText value="#{customer.firstName}" id="fn"/>
        <h:outputLabel value="Last Name:"/>
        <h:inputText value="#{customer.lastName}" id="ln"/>
        <h:outputLabel value="Email:"/>
        <h:inputText value="#{customer.email}" id="eml"/>
        <h:outputLabel value="Date of Birth:"/>
        <h:inputText value="#{customer.sd}" id="s"/>
        <f:facet name="footer">
            <h:outputLabel value="#{customer.msg}" id="msg" styleClass="msg"/>
            <h:commandButton value="Save" action="#{customer.saveCustomer}">
            </h:commandButton>
        </f:facet>
    </h:panelGrid> 

Customer.java

    package com.javaknowledge.entity;

    import com.javaknowledge.dao.CustomerDao;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import javax.faces.bean.ManagedBean;
    import javax.faces.bean.SessionScoped;
    import javax.persistence.*;    

    @ManagedBean
    @SessionScoped

    public class Customer implements java.io.Serializable {

    private Integer custId;
    private String firstName;
    private String lastName;
    private String email;
    private Date dob;
    private String sd, msg, selectedname;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");


    public Customer() {
    }

    public Customer(String firstName, String lastName, String email, Date dob) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.dob = dob;
    }

    public String getSd() {
        return sd;
    }

    public void setSd(String sd) {
        this.sd = sd;
    }

    public Integer getCustId() {
        return this.custId;
    }

    public void setCustId(Integer custId) {
        this.custId = custId;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return this.lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    @Column(name = "EMAIL")
    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Column(name = "DOB")
    public Date getDob() {
        return this.dob;
    }

    public void setDob(Date dob) {
        this.dob = dob;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getSelectedname() {
        return selectedname;
    }

    public void setSelectedname(String selectedname) {
        this.selectedname = selectedname;
    }

    public void saveCustomer() {
        try {
            Date d = sdf.parse(sd);
            System.out.println(d);
            this.dob = d;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        CustomerDao dao = new CustomerDao();
        dao.addCustomer(this);
        this.msg = "Member Info Saved Successfull!";
        clearAll();
    }
    public void updateCustomer() {
        try {
            Date d = sdf.parse(sd);
            System.out.println(d);
            this.dob = d;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        CustomerDao dao = new CustomerDao();
        dao.updateCustomer(this);
        this.msg = "Member Info Update Successfull!";
        clearAll();
    }
    public void deleteCustomer() {
        CustomerDao dao = new CustomerDao();
        dao.deleteCustomer(custId);
        this.msg = "Member Info Delete Successfull!";
        clearAll();
    }

    public List<Customer> getAllCustomers() {
        List<Customer> users = new ArrayList<Customer>();
        CustomerDao dao = new CustomerDao();
        users = dao.getAllCustomers();
        return users;
    }

    public void fullInfo() {
        CustomerDao dao = new CustomerDao();
        List<Customer> lc = dao.getCustomerById(selectedname);
        System.out.println(lc.get(0).firstName);
        this.custId = lc.get(0).custId;
        this.firstName = lc.get(0).firstName;
        this.lastName = lc.get(0).lastName;
        this.email = lc.get(0).email;
        this.dob = lc.get(0).dob;
        this.sd = sdf.format(dob);
    }

    private void clearAll() {
        this.firstName = "";
        this.lastName = "";
        this.sd = "";
        this.email = "";
        this.custId=0;
    }

   }

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
    <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
    <property name="hibernate.connection.url">jdbc:derby://localhost:1527/derbyDB</property>
    <property name="hibernate.connection.username">user1</property>
    <property name="hibernate.connection.password">user1</property>
    <property name="hibernate.hbm2ddl.auto">create</property>

    <property name="c3p0.min_size">1</property>
    <property name="c3p0.max_size">5</property>
    <property name="c3p0.timeout">300</property>
    <property name="c3p0.max_statements">50</property>
    <property name="c3p0.idle_test_period">300</property>

    <mapping class="com.javaknowledge.entity.Customer" resource="com/javaknowledge/entity/Customer.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

Customer.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="com.javaknowledge.entity.Customer" table="CUSTOMERV" schema="APP">
        <id name="custId" type="java.lang.Integer">
            <column name="cust_id" />
            <generator class="increment" />
        </id>
        <property name="firstName" type="string">
            <column name="first_name" length="45" not-null="true" />
        </property>
        <property name="lastName" type="string">
            <column name="last_name" length="45" not-null="true" />
        </property>
        <property name="email" type="string">
            <column name="email" length="45" not-null="true" />
        </property>
        <property name="dob" type="date">
            <column name="dob" length="10" not-null="true" />
        </property>
   </class>
</hibernate-mapping>

जवाबों:


120

अंत में मुझे एक गलती मिली! आशा है कि यह किसी के लिए उपयोगी है। डेटाबेस के लिए एक अनुरोध करते समय (मेरे मामले में यह अपाचे डर्बी), आधार के नाम को निचले मामले में पहले अक्षर ऊपरी मामले को लिखने की आवश्यकता है।

यह गलत प्रश्न है:

session.createQuery("select first_name from CUSTOMERV").

यह मान्य क्वेरी है

session.createQuery("select first_name from Customerv"). 

और वर्ग इकाई डेटाबेस के समान नाम होना चाहिए, लेकिन मुझे यकीन नहीं है।


44
वह कारण नहीं हो सकता है। ग्राहक से ग का चयन करें, यह ठीक क्वेरी है क्योंकि ग्राहक आप वर्ग का नाम है और हमें क्वेरी में वर्ग का नाम लिखना चाहिए तालिका का नाम नहीं। आपके hibernate.cfg.xml में कोई भी चीज़ जो आपने दोनों <मानचित्रण संसाधन और वर्ग> दी है केवल एक ही है ठीक हो जाएगा। कृपया उस के साथ जाँच करें।
शोएब चिकते 12

सलाह के लिए धन्यवाद Shoalib Chikate!
व्लाद डोब्रियाडिन


4
महान, मेरे लिए काम करने वाली एकल चीज सिर्फ डेटाबेस टेबल के नाम के बजाय क्लास के नाम को अच्छी तरह से स्वरूपित करती थी। मुझे लगता है कि हाइबरनेट को एक उचित मैपिंग करने में सक्षम होना चाहिए। यह थोड़ा भ्रामक है और सामान्य तरीके से नहीं है जैसे कि जेडीबीसी के साथ, लेकिन मुझे उम्मीद है कि भविष्य के संस्करण इस मुद्दे को पसंद करने की कोशिश करेंगे। यह इन क्वेरी तंत्रों में से कुछ के लिए JDBC से कुछ शैली रखने के लिए एक प्लस होगा।
अका

2
धन्यवाद। इसने मेरे लिए काम किया। वास्तव में यह इकाई / वर्ग का नाम लेता है तालिका का नाम नहीं। उदाहरण के लिए: यदि आपकी तालिका का नाम ग्राहक है और आपकी इकाई का नाम ग्राहक है, तो ग्राहक को क्वेरी में ले जाएगा क्योंकि यह एक एचक्यूएल क्वेरी है।
टेरी

50

में HQL क्वेरी, क्या नहीं लिख तालिका नाम , अपने बारे में इकाई वर्ग के नाम की तरह अपने प्रश्न में

String s = "from Entity_class name";
query qry = session.createUqery(s);

आपने अपना समय और मेरा जीवन (*> *) बचाया
वेदप्रकाश

19

मेरे मामले में मैं सिर्फ जोड़ना भूल गया nativeQuery = true

@Query( value = "some sql query ...", nativeQuery = true)

स्प्रिंग डेटा JPA के साथ स्प्रिंग बूट के लिए


1
धन्यवाद! मेरे साथ भी अब ऐसा ही हुआ है :)
Essayoub

12

hibernate.cfg.xml फ़ाइल में नीचे की तरह तालिकाओं के लिए मानचित्रण होना चाहिए। जांचें कि क्या यह आपकी फाइल में गायब है।

......
<hibernate-configuration>
......
......
  <session-factory>
......
<mapping class="com.test.bean.dbBean.testTableHibernate"/>
......
 </session-factory>

</hibernate-configuration>
.....

1
यह मेरे लिए ऐसा मामला था, जबकि डर्बी के बजाय ओरेकल डीबी के साथ काम करने के लिए कार्यान्वयन को बदलते हुए - डर्बी के साथ, किसी कारण के लिए, दृढ़ता में संस्थाओं की घोषणा करना। एक्सएमएल आवश्यक नहीं था (यह मुझे तर्कसंगत लग रहा था, क्योंकि संस्थाएं पहले से ही एनोटेट थीं) (शायद एक पुराने ड्राइवर (ojdbc6) की वजह से था
हेलो_अर्थ

9

यदि आप संस्थाओं को बनाने के लिए JPA एनोटेशन का उपयोग कर रहे हैं और फिर सुनिश्चित करें कि टेबल का नाम @Entity के बजाय @Table एनोटेशन के साथ मैप किया गया है।

गलत तरीके से मैप किया गया:

@Entity(name="DB_TABLE_NAME")
public class DbTableName implements Serializable {
   ....
   ....
}

सही ढंग से मैप की गई इकाई:

@Entity
@Table(name="DB_TABLE_NAME")
public class DbTableName implements Serializable {
   ....
   ....
}

3
धन्यवाद! यह वास्तव में इस समस्या का मेरा संस्करण था।
मार्टिन मैक्लेनियन

1
धन्यवाद बहुत उपयोगी है। दूसरों की मदद करते हुए
मुकेश कृष्णन

4

यह हो सकता है कि यह अधिक स्पष्ट हो, और निश्चित रूप से भी समझ में आता है।

@Entity
@Table(name = "users")

/**
 * 
 * @author Ram Srinvasan
 * Use class name in NamedQuery
 * Use table name in NamedNativeQuery
 */
@NamedQueries({ @NamedQuery(name = "findUserByName", query = "from User u where u.name= :name") })

@NamedNativeQueries({ @NamedNativeQuery(name = "findUserByNameNativeSQL", query = "select * from users u where u.name= :name", resultClass = User.class) })
public class User implements Principal {
...
}

3

इस अपवाद को प्राप्त करने के लिए एक और मौका है यहां तक ​​कि हमने कक्षा के नाम का उपयोग किया है, यदि हमारे पास अलग-अलग पैकेजों में एक ही नाम के साथ दो कक्षाएं हैं। हम इस समस्या को प्राप्त करेंगे।

मुझे लगता है कि हाइबरनेट में अस्पष्टता हो सकती है और यह अपवाद फेंकता है, इसलिए समाधान पूर्ण योग्य नाम (जैसे com.test.Customerv) का उपयोग करना है ) का उपयोग करना है

मैंने इस उत्तर को जोड़ा जो मेरे उल्लेख के अनुसार परिदृश्य में मदद करेगा। मुझे मिला वही परिदृश्य कुछ समय के लिए अटक गया।


3

किसी अन्य समाधान ने मेरे लिए काम नहीं किया।

यहां तक ​​कि अगर मुझे इसका सबसे अच्छा अभ्यास नहीं लगता है, तो मुझे इसे इस तरह कोड में जोड़ना पड़ा

configuration.addAnnotatedClass(com.myOrg.entities.Person.class);

यहाँ

public static SessionFactory getSessionFactory() {
    Configuration configuration = new Configuration().configure();

    configuration.addAnnotatedClass(com.myOrg.entities.Person.class);

    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
            .applySettings(configuration.getProperties());
    SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
    return sessionFactory;
}

3

जब मैंने हाइबरनेट पर काम करना शुरू किया तो मुझे भी इसी तरह के मुद्दे का सामना करना पड़ा। सब मैं कह सकता हूँ createQuery में एक इकाई वर्ग का नाम पारित करने की जरूरत है तालिका का नाम नहीं है जिसके लिए इकाई को मैप किया गया है।


2

इसका मतलब है कि आपकी तालिका JPA पर मैप नहीं की गई है। या तो तालिका का नाम गलत है (शायद मामला संवेदनशील है), या आपको XML फ़ाइल में प्रविष्टि डालने की आवश्यकता है।

हैप्पी कोडिंग :)


जो xml फ़ाइल में है?
सुब्रह्मण्यम जनपमुला

2

अन्य व्यक्ति जो हाइबरनेट के लिए मैपिंग कक्षाओं का उपयोग कर रहे हैं, सुनिश्चित करें कि निम्नलिखित में बीन घोषणा में मॉडल पैकेज के लिए सही तरीके से संबोधित किया गया है sessionFactory:

<property name="packagesToScan" value="com.mblog.model"></property>

जब मैं अपनी कॉन्फिगर फाइल packages-to-scanमें बदलाव करना भूल गया, तो मुझे यह स्पेसक्राफ्ट के साथ मिला था application.yml
इब्राहिम।

1

यदि आप कॉन्फ़िगरेशन के लिए जावा का उपयोग करते हुए किसी भी तरह से करते हैं, beanतो आपको पैकेज स्तर में बदलाव होने पर नीचे की घोषणा की जांच करने की आवश्यकता हो सकती है । जैसे: com.abc.springपैकेज बदल गयाcom.bbc.spring

@Bean
    public SessionFactory sessionFactory() {

        LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource());
        //builder.scanPackages("com.abc.spring");    //Comment this line as this package no longer valid.
        builder.scanPackages("com.bbc.spring");
        builder.addProperties(getHibernationProperties());

        return builder.buildSessionFactory();
    }

1

मेरे मामले में: स्प्रिंग बूट 2, एकाधिक डेटा स्रोत (डिफ़ॉल्ट और कस्टम)। entityManager.createQueryगलत हो जाओ: 'संस्था का मैप नहीं है'

डीबग करते समय, मुझे पता चलता है कि UnitManager का यूनिटनाम गलत है (कस्टम होना चाहिए, लेकिन तथ्य डिफ़ॉल्ट है) सही तरीके से:

@PersistenceContext(unitName = "customer1") // !important, 
private EntityManager em;

customer1दूसरे डेटा स्रोत config वर्ग से है:

@Bean(name = "customer1EntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
        @Qualifier("customer1DataSource") DataSource dataSource) {
    return builder.dataSource(dataSource).packages("com.xxx.customer1Datasource.model")
            .persistenceUnit("customer1")
            // PersistenceUnit injects an EntityManagerFactory, and PersistenceContext
            // injects an EntityManager.
            // It's generally better to use PersistenceContext unless you really need to
            // manage the EntityManager lifecycle manually.
            // 【4】
            .properties(jpaProperties.getHibernateProperties(new HibernateSettings())).build();
}

उसके बाद, निकाय प्रबंधक सही है।

लेकिन, em.persist (निकाय) काम नहीं करता है, और लेनदेन काम नहीं करता है।

एक और महत्वपूर्ण बिंदु है:

@Transactional("customer1TransactionManager") // !important
public Trade findNewestByJdpModified() {
    //test persist,working right!
    Trade t = new Trade();
    em.persist(t);
    log.info("t.id" + t.getSysTradeId());

    //test transactional, working right!
    int a = 3/0;
}

customer1TransactionManager दूसरे डेटा स्रोत कॉन्‍फ़िगर वर्ग से है:

@Bean(name = "customer1TransactionManager")
public PlatformTransactionManager transactionManager(
        @Qualifier("customer1EntityManagerFactory") EntityManagerFactory entityManagerFactory) {
    return new JpaTransactionManager(entityManagerFactory);
}

पूरे दूसरे डेटा स्रोत का विन्यास वर्ग है:

package com.lichendt.shops.sync;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "customer1EntityManagerFactory", transactionManagerRef = "customer1TransactionManager",
        // 【1】这里写的是DAO层的路径 ,如果你的DAO放在 com.xx.DAO下面,则这里写成 com.xx.DAO
        basePackages = { "com.lichendt.customer1Datasource.dao" })
public class Custom1DBConfig {

    @Autowired
    private JpaProperties jpaProperties;

    @Bean(name = "customer1DatasourceProperties")
    @Qualifier("customer1DatasourceProperties")
    @ConfigurationProperties(prefix = "customer1.datasource")
    public DataSourceProperties customer1DataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean(name = "customer1DataSource")
    @Qualifier("customer1DatasourceProperties")
    @ConfigurationProperties(prefix = "customer1.datasource") //
    // 【2】datasource配置的前缀,对应上面 【mysql的yaml配置】
    public DataSource dataSource() {
        // return DataSourceBuilder.create().build();
        return customer1DataSourceProperties().initializeDataSourceBuilder().build();
    }

    @Bean(name = "customer1EntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder,
            @Qualifier("customer1DataSource") DataSource dataSource) {
        return builder.dataSource(dataSource).packages("com.lichendt.customer1Datasource.model") // 【3】这里是实体类的包路径
                .persistenceUnit("customer1")
                // PersistenceUnit injects an EntityManagerFactory, and PersistenceContext
                // injects an EntityManager.
                // It's generally better to use PersistenceContext unless you really need to
                // manage the EntityManager lifecycle manually.
                // 【4】
                .properties(jpaProperties.getHibernateProperties(new HibernateSettings())).build();
    }

    @Bean(name = "customer1TransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("customer1EntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

दिखाता है कि स्प्रिंगबूट 2 के साथ कई डेटासोर्स को कैसे कॉन्फ़िगर करें।
हेटनोह

0

समस्या आंशिक रूप से हल हो गई थी। Jdbc / resource (DB Derby) बनाने के अलावा, Glassfish व्यवस्थापक कंसोल में db संसाधन के लिए JDBC कनेक्शन पूल बनाना था, और इसे पिंगिंग पर जांचें। अब सभी CRUD ऑपरेशन ठीक काम करते हैं। मैं जाँचता हूँ, डेटाबेस में ऑब्जेक्ट कस्टमर ठीक से जोड़ना, अपडेट करना और हटाना भी। लेकिन ग्लासफिश आउटपुट लॉग में एक ही अपवाद है:

SEVERE:   org.hibernate.hql.internal.ast.QuerySyntaxException: CUSTOMERV is not mapped [select concat(first_name, ' ', last_name) as name from CUSTOMERV]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.generateQueryException(QuerySyntaxException.java:96)
    at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:120)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:234)
    .......

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: CUSTOMERV is not mapped
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:189)
    at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:109)

1
एक नया प्रश्न खोलें ... यह पहले प्रश्न का उत्तर नहीं है ... या 'अपडेट' कीवर्ड के साथ अपने पहले प्रश्न को बढ़ाएं
Pipo

0

इकाई के लिए इकाई नाम का उपयोग करना चाहिए।

इकाई वर्ग के साथ:

em.createQuery ("CUSTOMERV से first_name चुनें")

इकाई वर्ग या मूल प्रश्न के बिना:

em.createNativeQuery ("CUSTOMERV c से c.first_name चुनें")


0

अपाचे डर्बी डीबी में, टेबल नामों को "उपयोगकर्ता" के रूप में उपयोग करने से बचना चाहिए, क्योंकि वे अपाचे डर्बी पर आरक्षित कीवर्ड हैं लेकिन MySql पर ठीक काम करेंगे।

क्वेरी में, आपको एंटिटी वर्ग का नाम निर्दिष्ट करना होगा जिसे आप क्वेरी के FROM क्लॉज से डेटा प्राप्त करना चाहते हैं।

List<User> users=session.createQuery("from User").list();

यहां, उपयोगकर्ता मेरे जावा इकाई वर्ग का नाम है (नाम के आवरण पर विचार करें क्योंकि जावा में यह मायने रखता है।)


0

एक और उपाय जो काम किया:

डेटा एक्सेस ऑब्जेक्ट जो वास्तव में इस अपवाद को फेंक दिया है

public List<Foo> findAll() {
    return sessionFactory.getCurrentSession().createQuery("from foo").list();
}

उपरोक्त स्निपेट में मैंने जो गलती की है वह यह है कि मैंने createQuery के अंदर तालिका नाम फू का उपयोग किया है। इसके बजाय, मुझे वास्तविक वर्ग के नाम फू का उपयोग करना पड़ा।

public List<Foo> findAll() {
    return sessionFactory.getCurrentSession().createQuery("from Foo").list();

इस ब्लॉग के लिए धन्यवाद: https://www.arundhaj.com/blog/querysyntaxexception-not-mapped.html


0

अन्य व्यक्ति जो हाइबरनेट के लिए मैपिंग कक्षाओं का उपयोग कर रहे हैं, सुनिश्चित करें कि सत्र पैकेज में मॉडल पैकेज को सही ढंग से संबोधित किया गया है निम्नलिखित भाग में सेम की घोषणा:

public List<Book> list() {
    List<Book> list=SessionFactory.getCurrentSession().createQuery("from book").list();
    return list;
}

उपरोक्त स्निपेट में मैंने जो गलती की है वह यह है कि मैंने createQuery के अंदर तालिका नाम फू का उपयोग किया है। इसके बजाय, मुझे वास्तविक वर्ग के नाम फू का उपयोग करना पड़ा।

public List<Book> list() {                                                                               
    List<Book> list=SessionFactory.getCurrentSession().createQuery("from Book").list();
    return list;
}

0

जोड़ने के पैरामीटर nativeQuery = सच

ex: @Query (मान = "अपडेट उपयोगकर्ता सेट user_name =: user_name, पासवर्ड =: पासवर्ड जहाँ user_id =: user_id", nativeQuery = true)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.