【问题标题】:No query defined for that name using Hibernate API没有使用 Hibernate API 为该名称定义查询
【发布时间】:2016-08-06 14:09:21
【问题描述】:

我正在使用 Hibernate 5.2.1.Final 和 SQLite(驱动程序:Xerial 3.11.8.2)和 Maven 开发应用程序。问题是,Hibernate 找不到我的命名查询(位于使用 @Entity (javax.persistence.Entity) 注释提供的实体中。到目前为止,我已经到处寻找解决方案,但我无法做出它工作。

我最近切换到 Hibernate API 而不是使用 JPA ——我之前没有遇到任何问题,也没有对这个命名查询进行任何修改。就我而言,我仍然可以使用 javax.persistence 注释。

我得到的异常:

 Caused by: java.lang.IllegalArgumentException: No query defined for that name [SugerowanaPozycja.getByCategory]
    at org.hibernate.internal.AbstractSharedSessionContract.getNamedQuery(AbstractSharedSessionContract.java:546)
    at org.hibernate.internal.AbstractSharedSessionContract.getNamedQuery(AbstractSharedSessionContract.java:101)
    at pl.nombritech.Menual.dao.SugerowanaPozycjaDAO.getByKategoria(SugerowanaPozycjaDAO.java:90)
    at pl.nombritech.Menual.view.GlowneOknoController.uzupelnijSugerowanePozycje(GlowneOknoController.java:227)
    at pl.nombritech.Menual.view.GlowneOknoController.initialize(GlowneOknoController.java:210)
    ... 22 more

我的实体类中的注释:

import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;

    @Entity
    @NamedQueries({ 
    @NamedQuery(name = "SugerowanaPozycja.getByCategory",
    query = "SELECT e FROM SugerowanaPozycja e WHERE e.kategoria = :kategoria")
    })

这就是异常发生的地方:

public static ObservableList<SugerowanaPozycja> getByKategoria(String kategoria)
{
    Session session = Main.SESSION_FACTORY.openSession();

    Transaction transaction = session.beginTransaction();

    Query<SugerowanaPozycja> query = session.getNamedQuery("SugerowanaPozycja.getByCategory"); // exception here
    query.setParameter("kategoria", kategoria);
    ObservableList<SugerowanaPozycja> list = FXCollections.observableArrayList(query.getResultList());

    transaction.commit();

    session.close();

    return list;
}

我的hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.sqlite.JDBC</property>
        <property name="hibernate.connection.url">jdbc:sqlite:menual_data/bazadb.db</property>
        <property name="hibernate.connection.username"></property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">pl.nombritech.Menual.util.SQLiteDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
        <property name="hibernate.c3p0.min_size">1</property>
        <property name="hibernate.c3p0.max_size">1</property>
    </session-factory>
</hibernate-configuration>

最后是我如何初始化 Hibernate:

public static SessionFactory SESSION_FACTORY;

Configuration configuration = new Configuration().configure(Main.class.getResource("/hibernate.cfg.xml"));
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
serviceRegistryBuilder.applySettings(configuration.getProperties());
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
SESSION_FACTORY = configuration.buildSessionFactory(serviceRegistry);

对于此事的任何提示,我将不胜感激。我知道这里有很多这样的线程,但对我来说没有帮助。

【问题讨论】:

  • 我最近改用 Hibernate API 而不是使用 JPA 的:你不应该那样做。但无论如何,您的课程并未在配置文件中列为实体。您需要一个 &lt;mapping&gt; 元素。阅读 docs.jboss.org/hibernate/orm/5.2/quickstart/html_single/… 并下载包含示例的 zip 文件。
  • 谢谢,我在某处看到纯 Hibernate 提供了比 JPA 更多的可能性,我想坚持使用 Hibernate,不打算切换到任何其他提供商,因为这是唯一的优势我想使用JPA?我认为 Hibernate 可以扫描我的类以找到具有 @Entity 注释的类...
  • 就我而言,我使用 StandardServiceRegistryBuilder 完成的配置不正确。一旦修复,它就会像 Hibernate 4.1.x 一样拾取映射

标签: java hibernate maven


【解决方案1】:

您的查询所在的类的映射应该存在于 hibernate.cfg.xml 中。在这种情况下,因为它不存在,这就是您收到此异常的原因。

为了解决这个问题,请在 hibernate.cfg.xml 中放置以下标签:

<mapping class="your.package.ClassName"/>

然后重新运行你的程序。

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多