簡體   English   中英

我怎么能在休眠中創建這樣的查詢

[英]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.idauction.name是一個隱含的內部連接,這意味着bid.auction.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM