Java 如何映射一个非持久的用户定义类,以便Hibernate从SQLQuery加载带有实例的bean

Java 如何映射一个非持久的用户定义类,以便Hibernate从SQLQuery加载带有实例的bean,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我刚开始使用hibernate,除了直接表映射场景之外,我很难让它在任何情况下工作。基本上,我有一个用户定义的Java类:BookInvoice。此类是非持久性的(不是db表),使用以前定义和注释的db表中的列。每次我尝试将其标记为@实体时,它都会告诉我我不能,因为它不是现有的db表。我如何绘制地图,以便不获取 未知实体:com.acentia.training.project15.model.BookInvoice 我遇到的错误消息 我的sql查询很好,我能够从数据库中获取信息;但是,它们作为

我刚开始使用hibernate,除了直接表映射场景之外,我很难让它在任何情况下工作。基本上,我有一个用户定义的Java类:BookInvoice。此类是非持久性的(不是db表),使用以前定义和注释的db表中的列。每次我尝试将其标记为@实体时,它都会告诉我我不能,因为它不是现有的db表。我如何绘制地图,以便不获取

未知实体:com.acentia.training.project15.model.BookInvoice

我遇到的错误消息

我的sql查询很好,我能够从数据库中获取信息;但是,它们作为类对象返回,我不允许将它们强制转换到所需的BookInvoice类中,以便将其发送回调用方法。下面请找到我迄今为止的工作重点

请注意,我所有符合现有db表查询的常规类都可以正常工作,我遇到的问题只是那些非持久性的类

PurchaseOrderInvoiceDAO:

        List<BookInvoice> bInvoiceList = null;
        final String bookInvoiceQuery =
                "SELECT Books.ID, PO_Details.QUANTITY, Books.ISBN, Books.TITLE, Books.AUTHOR, Author.Name, Books.PUBLISHED, Books.COVER, Books.SERIES, Books.SERIES_NO,\n" +
                        "          Books.SUBJECT_ID,Books.PRICE\n" +
                        "        FROM Purchase_Order, PO_Details, Books, Author\n" +
                        "        WHERE Purchase_Order.ID=?\n" +
                        "        AND Purchase_Order.ID=PO_Details.PO_ID\n" +
                        "        AND PO_Details.Book_ID=Books.ID\n" +
                        "        AND Books.AUTHOR=Author.ID";

        Query bookInvoicQ = getSession().createSQLQuery(bookInfoQuery).addEntity(BookInvoice.class);
        bookInvoicQ.setInteger(0, id);
        bList = (List<Books>) bookInvoicQ.list();
堆栈跟踪代码段:

           Struts Problem Report

           Struts has detected an unhandled exception:

           Messages:    
           Unknown entity: com.acentia.training.project15.model.BookInvoice
           File:    org/hibernate/impl/SessionFactoryImpl.java
           Line number:     693
           Stacktraces
org.hibernate.MappingException:未知实体:
com.acentia.training.project15.model.BookInvoice
org.hibernate.impl.SessionFactoryImpl.GetEntityPerister(SessionFactoryImpl.java:693)

org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.getsqlloadeble(SQLQueryReturnProcessor.java:335) org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processRootReturn(SQLQueryReturnProcessor.java:376) org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processReturn(SQLQueryReturnProcessor.java:355) org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.process(SQLQueryReturnProcessor.java:171) org.hibernate.loader.custom.sql.SQLCustomQuery.(SQLCustomQuery.java:87) NativeSQLQueryPlan.(NativeSQLQueryPlan.java:67) org.hibernate.engine.query.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:166) org.hibernate.impl.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:160) org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) com.acentia.training.project15.bo.purchaseOrderInvoiceCo$PurchaseOrderInvoiceDAO.getById(purchaseOrderInvoiceCo.java:196)


…好的!最后我崩溃了,和我的主管谈了这件事。他解释说我在这方面做了很多额外的工作

基本上,如果我正确设置了
@Entity
类/DB映射,那么它们将从直接对应于DB表的类的映射中获得所有正确的信息(即
@OneToMany
,等等)。基本上,Hibernate会降低很多级别(PO_Details->Payments->Books,等等),它们会提供我需要的所有附加信息,而我不需要创建自己的自定义类

           Struts Problem Report

           Struts has detected an unhandled exception:

           Messages:    
           Unknown entity: com.acentia.training.project15.model.BookInvoice
           File:    org/hibernate/impl/SessionFactoryImpl.java
           Line number:     693
           Stacktraces