[英]How could i create such query in hibernate
這是我的查詢:
SELECT auc_id,name,MAX(amount) FROM `auc`
INNER JOIN bid
where bid.auc_id = auc.id
GROUP BY (auc_id)
映射:
<?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="DAO.Bid" table="bid" lazy="false">
<id column="id" name="id" type="java.lang.Integer">
<generator class="identity"/>
</id>
<property column="amount" name="amount" type="java.lang.Integer" />
<property column="type" name="type" type="java.lang.Integer" />
<many-to-one name="owner_id" column="owner_id" class="DAO.Users" not-null="false" cascade="all"/>
<many-to-one name="auc_id" column="auc_id" class="DAO.Auction" not-null="false" cascade="all"/>
</class>
</hibernate-mapping>
拍賣類映射:
<?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="DAO.Auction" table="auc" lazy="false">
<id column="Id" name="id" type="java.lang.Integer">
<generator class="identity"/>
</id>
<property column="name" name="name" type="java.lang.String" />
</class>
</hibernate-mapping>
我需要使用 hibernate 創建相同的查詢。我需要從每次拍賣中獲取名稱表單 auc 表、auction_id 字段和字段金額的最大值。
現在查詢: SELECT b FROM DAO.Bid b INNER JOIN b.auc_id
但是它拋出錯誤 Auc 表的第一列在類 Bid 中未映射。這是真的,因為這個字段在類 Auction 內。但是我能做什么打?
HQL 不是 SQL。 HQL 中的聯接在很大程度上利用您的關系進行正確映射,而不是每次都通過列名顯式聯接。
假設你有這樣的模型:
class Auction {
Integer id;
String name;
}
class Bid {
Integer id;
Auction auction;
BigDecimal amount;
}
它應該看起來像
select auction.id, auction.name, max(amount) -- you may need to use max(auction.id),
-- max(auction.name) for some DB
from Bid
group by auction.id
( auction.id
和auction.name
是一個隱含的內部連接,這意味着bid.auction.id
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.