Java Hibernate查询语言(HQL)QueryException:无法解析属性:事务:类。Advicenote,如何解决此问题?我很困惑
Advicenote表的In_或_Out变量指示项目是从公司发出还是从公司发出,而交易有一个流量变量,它实际上是从系统发出或发出的项目的数量或数量。我想查询库存中物品的实际数量,方法是将Advicenote.in\u或\u Out和Transactions.Flow相乘,然后求和,并按items.Item\u ID对它们进行分组。如果您能提供帮助,我将不胜感激 下面,您可以看到我为此编写的HQL以及收到的错误消息:Java Hibernate查询语言(HQL)QueryException:无法解析属性:事务:类。Advicenote,如何解决此问题?我很困惑,java,database,hibernate,orm,hql,Java,Database,Hibernate,Orm,Hql,Advicenote表的In_或_Out变量指示项目是从公司发出还是从公司发出,而交易有一个流量变量,它实际上是从系统发出或发出的项目的数量或数量。我想查询库存中物品的实际数量,方法是将Advicenote.in\u或\u Out和Transactions.Flow相乘,然后求和,并按items.Item\u ID对它们进行分组。如果您能提供帮助,我将不胜感激 下面,您可以看到我为此编写的HQL以及收到的错误消息: public List<ItemAndQuantity> getQu
public List<ItemAndQuantity> getQuantity()
{
List<ItemAndQuantity> quantity = new ArrayList<ItemAndQuantity>();
try {
session = sessionFactory.openSession();
transaction = session.beginTransaction();
Query query = session.createQuery("select sum(t.flow * a.inOrOut) from Advicenote a join a.Transactions t join t.Items i group by i.itemId");
quantity = query.list();
transaction.commit();
}
catch (HibernateException e) {
if (transaction != null) {
transaction.rollback();
}
}
finally {
session.close();}
return quantity;
}
事务XML
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Feb 9, 2019, 3:57:52 PM by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name="classes.Transactions" table="TRANSACTIONS" schema="APP" optimistic-lock="version">
<id name="transactionsId" type="int" column="TRANSACTIONS_ID">
<generator class="native" />
</id>
<property name="flow" type="int" column="FLOW" not-null="true" />
<property name="netPrice" type="java.lang.Integer" column="NET_PRICE" />
<many-to-one name="advicenote" class="classes.Advicenote"/>
<many-to-one name="item" class="classes.Items" fetch="select" cascade="save-update" column="ITEM_ID" unique="true" not-null="true"/>
</class>
</hibernate-mapping>
项目XML
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="classes.Items" table="ITEMS" schema="APP" optimistic-lock="version">
<id name="itemId" type="int" column="ITEM_ID">
<generator class="native" />
</id>
<property name="name" type="string" column="NAME" length="100"/>
<property name="netPrice" type="java.lang.Integer" column="NET_PRICE"/>
<property name="vatRate" type="java.lang.Integer" column="VAT_RATE"/>
<many-to-one name="category" class="classes.Categories" fetch="select" column="CATEGORY_ID" not-null="true"/>
</class>
</hibernate-mapping>
类别XML
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Feb 9, 2019, 3:57:52 PM by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name="classes.Categories" table="CATEGORIES" schema="APP" optimistic-lock="version">
<id name="categoryId" type="int">
<column name="CATEGORY_ID" />
<generator class="native" />
</id>
<property name="name" type="string">
<column name="NAME" length="100" />
</property>
<set name="items" table="ITEMS" inverse="false" cascade="all" lazy="false" fetch="select">
<key>
<column name="CATEGORY_ID" not-null="true" />
</key>
<one-to-many class="classes.Items" />
</set>
</class>
</hibernate-mapping>
问题在于a.交易 同时移除t.项 使用以下命令:-
select sum(t.flow * a.inOrOut) from Advicenote a join Transactions t join Items i group by i.itemId
您的查询:
select sum(t.flow * a.inOrOut) from Advicenote a join a.Transactions t join t.Items i group by i.itemId
应该是:
select sum(t.flow * a.inOrOut) from Advicenote a join a.transactions t join t.item i group by i.itemId
小写事务,项目也使用小写且不带“s”。它们引用的是字段,而不是类。不幸地没有解决它:线程AWT-EventQueue-0 java.lang.IllegalArgumentException:org.hibernate.QueryException:无法解析属性:项:classes.Transactions[从类中选择sumt.flow*a.inOrOut.Advicenote a join classes.Transactions t join t.Items i按i.itemId分组]您仍然在使用t.Items再次检查我的查询我发誓我使用了ctrl+Cctrtl+v-d这个查询…但是仍然没有运气,当我使用这个时,我得到了另一个异常:线程AWT-EventQueue-0 javax.persistence.PersistenceException中的异常:org.hibernate.exception.sqlgrammareException:无法准备语句``java.sql.SQLSyntaxErrorException:Syntax错误:在第1行第143列遇到内部错误。您的注释仍然显示join t。我的查询中的Items是唯一的Items非常感谢您的解决方案,但是我遇到另一个异常:线程AWT-EventQueue-0 org.hibernate.LazyInitializationException中的异常:无法初始化代理[classes.Categories1]-没有Session@Fluellen你有类别映射文件吗?顺便说一句,Fluellen是你的真名吗?不,不是,你为什么要问?:我编辑了我的问题以包括类别映射文件我很好奇…我发现一个可能的问题,即项目和类别相互引用。可能是Items.category或Categories.Items should have inverse=true和/或lazy=true。@Fluellen不,实际上我认为问题在于您在关闭会话后正在使用查询结果。不要这样做。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Feb 9, 2019, 3:57:52 PM by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
<class name="classes.Categories" table="CATEGORIES" schema="APP" optimistic-lock="version">
<id name="categoryId" type="int">
<column name="CATEGORY_ID" />
<generator class="native" />
</id>
<property name="name" type="string">
<column name="NAME" length="100" />
</property>
<set name="items" table="ITEMS" inverse="false" cascade="all" lazy="false" fetch="select">
<key>
<column name="CATEGORY_ID" not-null="true" />
</key>
<one-to-many class="classes.Items" />
</set>
</class>
</hibernate-mapping>
select sum(t.flow * a.inOrOut) from Advicenote a join Transactions t join Items i group by i.itemId
select sum(t.flow * a.inOrOut) from Advicenote a join a.Transactions t join t.Items i group by i.itemId
select sum(t.flow * a.inOrOut) from Advicenote a join a.transactions t join t.item i group by i.itemId