org.hibernate.hql.internal.ast.QuerySyntaxException: bảng không được ánh xạ


96

Tôi có ứng dụng web ví dụ Hibernate 4.3.5 + cơ sở dữ liệu Derby 10.10.1.1+ Glassfish4.0 với IDE NetBeans 8.0Beta.

Tôi có ngoại lệ tiếp theo:

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 

Biểu mẫu từ 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>

Câu trả lời:


120

Cuối cùng tôi đã tìm thấy một sai lầm! Hy vọng điều này là hữu ích cho ai đó. Khi thực hiện một yêu cầu đối với cơ sở dữ liệu (trong trường hợp của tôi là Apache Derby), tên cơ sở cần viết chữ hoa đầu tiên khác chữ thường.

Đây là truy vấn sai:

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

Đây là truy vấn hợp lệ

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

Và thực thể lớp phải cùng tên với cơ sở dữ liệu, nhưng tôi không chắc.


44
Đó có thể không phải là lý do. Chọn c từ Khách hàng c đây là truy vấn tốt vì Khách hàng là tên lớp của bạn và chúng ta nên viết tên lớp trong truy vấn chứ không phải tên bảng. Một điều khác trong hibernate.cfg.xml của bạn, bạn đã cung cấp cho cả hai <bản đồ tài nguyên và lớp> chỉ một sẽ ổn thôi. Hãy kiểm tra với điều đó.
Shoaib Chikate

Cảm ơn vì lời khuyên Shoalib Chikate!
Vlad Dobrydin

Vui lòng hướng dẫn trên stackoverflow.com/questions/35657292/…
Pra_A

4
Tuyệt vời, điều duy nhất phù hợp với tôi là chỉ sử dụng tên lớp được định dạng tốt thay vì tên bảng cơ sở dữ liệu. Tôi nghĩ Hibernate yêu cầu điều này để có thể thực hiện một ánh xạ thích hợp. Nó hơi khó hiểu và không phải là cách thông thường như với JDBC, nhưng tôi hy vọng các phiên bản trong tương lai sẽ cố gắng giải quyết vấn đề này. Sẽ là một điểm cộng nếu giữ một số kiểu từ JDBC cho một số cơ chế truy vấn này.
Akah

2
Cảm ơn. Nó đã làm việc cho tôi. Trên thực tế, nó lấy tên thực thể / lớp không phải tên bảng. Ví dụ: nếu tên bảng của bạn là CUSTOMER và tên thực thể của bạn là Khách hàng, Nó sẽ đưa Khách hàng vào truy vấn vì nó là một truy vấn HQL.
Terry

50

trong truy vấn HQL , Không viết tên Bảng , hãy viết tên lớp Thực thể của bạn trong truy vấn của bạn như

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

Bạn tiết kiệm thời gian của tôi cũng như cuộc sống của tôi (*> *)
Ved Prakash

19

Trong trường hợp của tôi, tôi vừa quên thêm nativeQuery = true

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

Đối với Spring Boot với Spring Data JPA


1
Cảm ơn! điều tương tự đã xảy ra với tôi bây giờ :)
essoub

12

Tệp hibernate.cfg.xml nên có ánh xạ cho các bảng như bên dưới. Kiểm tra xem nó có bị thiếu trong tệp của bạn không.

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

</hibernate-configuration>
.....

1
đây là trường hợp của tôi, trong khi thay đổi triển khai để hoạt động với Oracle DB thay vì Derby - với Derby, vì một số lý do, việc khai báo các thực thể trong Persence.xml là không cần thiết (nó có vẻ hợp lý với tôi, vì các thực thể đã được chú thích) (có thể đó là vì một người lái xe cũ (ojdbc6))
hello_earth

9

Nếu bạn đang sử dụng các chú thích JPA để tạo các thực thể và sau đó đảm bảo rằng tên bảng được ánh xạ cùng với chú thích @Table thay vì @Entity.

Ánh xạ không chính xác:

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

Thực thể được ánh xạ chính xác:

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

3
Cảm ơn bạn! Đó chính xác là phiên bản của tôi về vấn đề này.
Martin McCallion

1
Cảm ơn Rất hữu ích. Giữ giúp đỡ người khác
krishnan Mukesh

4

Có thể điều này sẽ làm cho nó rõ ràng hơn, và tất nhiên cũng có ý nghĩa.

@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

Có một cơ hội nữa để có được ngoại lệ này ngay cả khi chúng ta đã sử dụng tên lớp, tức là, nếu chúng ta có hai lớp có cùng tên trong các gói khác nhau. chúng tôi sẽ nhận được vấn đề này.

Tôi nghĩ hibernate có thể mơ hồ và ném ra ngoại lệ này, vì vậy giải pháp là sử dụng tên hoàn chỉnh đủ điều kiện (như com.test.Customerv )

Tôi đã thêm câu trả lời này sẽ giúp ích trong kịch bản như tôi đã đề cập. Tôi có cùng một kịch bản bị mắc kẹt trong một thời gian.


3

Không có giải pháp nào khác phù hợp với tôi.

Ngay cả khi tôi không nghĩ đó là phương pháp hay nhất, tôi đã phải thêm nó vào mã như thế này

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

đây

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

Tôi cũng đã gặp phải vấn đề tương tự khi bắt đầu làm việc trên Hibernate. Tất cả những gì tôi có thể nói là trong createQuery, người ta cần chuyển tên của lớp thực thể chứ không phải tên bảng mà thực thể được ánh xạ tới.


2

Nó có nghĩa là bảng của bạn không được ánh xạ tới JPA. Tên của bảng bị sai (Có thể phân biệt chữ hoa chữ thường) hoặc bạn cần đặt một mục nhập vào tệp XML.

Mã hóa vui vẻ :)


trong tệp xml nào?
Subrahmanyam Janapamula

2

Những người khác đang sử dụng các lớp ánh xạ cho Hibernate, hãy đảm bảo rằng đã định địa chỉ chính xác để mô hình gói trong sessionFactorykhai báo bean trong phần sau:

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

Tôi gặp sự cố này với micronaut khi tôi quên thay đổi tệp cấu hình packages-to-scancủa mình application.yml.
Ibrahim.H

1

Nếu bạn tình cờ sử dụng java để cấu hình, bạn có thể cần phải kiểm tra beankhai báo bên dưới nếu bạn có thay đổi cấp độ gói. Vd: com.abc.springgói thay đổi thànhcom.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

Trong trường hợp của tôi: khởi động mùa xuân 2, nhiều nguồn dữ liệu (mặc định và tùy chỉnh). entityManager.createQuerysai: 'thực thể không được ánh xạ'

trong khi gỡ lỗi, tôi phát hiện ra rằng unitName của entityManager là sai (phải là tùy chỉnh, nhưng thực tế là mặc định) theo cách đúng:

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

những customer1là từ lớp nguồn dữ liệu cấu hình thứ hai:

@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();
}

Sau đó, entityManager là đúng.

Tuy nhiên, em.persist (thực thể) không hoạt động và giao dịch không hoạt động.

Một điểm quan trọng khác là:

@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 là từ lớp cấu hình nguồn dữ liệu thứ hai:

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

Toàn bộ lớp cấu hình nguồn dữ liệu thứ hai là:

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);
    }
}

chương trình như thế nào để cấu hình nhiều nguồn dữ liệu với springboot 2.
hatanooh

0

Vấn đề đã được giải quyết một phần. Bên cạnh việc tạo jdbc / resource (DB Derby) phải tạo JDBC Connection Pool cho tài nguyên db trong bảng điều khiển quản trị Glassfish và kiểm tra nó khi ping. Bây giờ tất cả các hoạt động CRUD hoạt động tốt. Tôi kiểm tra, đối tượng Khách hàng trong cơ sở dữ liệu thêm đúng cách, cập nhật và xóa quá. Nhưng trong nhật ký đầu ra của Glassfish có cùng một ngoại lệ:

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
Đề nghị mở một câu hỏi mới ... Đây không phải là một câu trả lời cho câu hỏi đầu tiên ... hoặc tăng cường câu hỏi đầu tiên của bạn với 'Update' từ khóa
Pipo

0

Nên sử dụng tên lớp Thực thể cho phương thức em.createQuery hoặc Nên sử dụng phương thức em.createNativeQuery cho truy vấn gốc không có lớp thực thể

Với lớp Thực thể:

em.createQuery ("select first_name từ CUSTOMERV")

Không có lớp Thực thể hoặc truy vấn Gốc:

em.createNativeQuery ("chọn c.first_name từ CUSTOMERV c")


0

Trong Apache Derby DB, không sử dụng tên bảng là "người dùng" hoặc lâu hơn vì chúng là từ khóa dành riêng trên Apache Derby nhưng sẽ hoạt động tốt trên MySql.

Trong Truy vấn, bạn phải chỉ định tên của lớp Thực thể mà bạn muốn tìm nạp dữ liệu trong mệnh đề FROM của Truy vấn.

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

Ở đây, Người dùng là tên của lớp Thực thể Java của tôi (Hãy xem xét cách viết hoa của tên như trong Java nó quan trọng.)


0

Một giải pháp khác đã hoạt động:

Đối tượng truy cập dữ liệu đã thực sự ném ra ngoại lệ này là

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

Sai lầm tôi đã làm trong đoạn mã trên là tôi đã sử dụng tên bảng foo bên trong createQuery. Thay vào đó, tôi phải sử dụng Foo, tên lớp thực tế.

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

Cảm ơn blog này: https://www.arundhaj.com/blog/querysyntaxexception-not-mapped.html


0

Những người khác đang sử dụng các lớp ánh xạ cho Hibernate, hãy đảm bảo rằng đã định địa chỉ chính xác cho gói mô hình trong khai báo bean sessionFactory trong phần sau:

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

Sai lầm tôi đã làm trong đoạn mã trên là tôi đã sử dụng tên bảng foo bên trong createQuery. Thay vào đó, tôi phải sử dụng Foo, tên lớp thực tế.

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

0

thêm tham số nativeQuery = true

ví dụ: @Query (value = "Cập nhật tập người dùng user_name =: user_name, password =: password nơi user_id =: user_id", nativeQuery = true)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.