2015-07-22 39 views
0

的名單我有這個疑問:Hibernate查詢返回一個平等價值

Query query1 = session.createSQLQuery(
      //"select transactions.userId from transactions where transactions.id in (select tickets.transactionId from tickets where tickets.validate=:validate and tickets.auctionId in (select id from auctions where sellShare=:sellShare)) group by transactions.userId") 
      "select transactions.userId, auctions.id from auctions inner join (tickets inner join transactions on tickets.transactionId = transactions.id) on auctions.id = tickets.auctionId where auctions.sellShare = :sellShare and tickets.validate=:validate") 
      .addEntity(Test.class).setParameter("sellShare", 1).setParameter("validate", 1); 
    List<Test> tests = query1.list(); 

查詢返回20個字段的列表,但他們都是平等的。我該如何解決它? 我知道查詢工作正常,因爲在mysql中返回正確的字段。

enter image description here

下面是測試的XML映射:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="applica.luxury.frontend.viewmodel.Test"> 
     <id name="id" type="long"> 
      <generator class="native" /> 
     </id> 
     <property name="userId" /> 
    </class> 
</hibernate-mapping> 
+1

你試過'select disctinct transactions.userId .......'? –

+1

你是否用'Distinct'試過了相同的查詢? http://stackoverflow.com/questions/263850/how-do-you-create-a-distinct-query-in-hql –

+0

不,我沒試過,我現在在做 – Shiroga

回答

1

試試這個東西

List<Test> tests = null; 
    String query = "select transactions.userId, auctions.id from auctions inner join (tickets inner join transactions on tickets.transactionId = transactions.id) on auctions.id = tickets.auctionId where auctions.sellShare = :sellShare and tickets.validate=:validate"; 
    tests = (List<Test>) ((Query) session.createQuery(query).addEntity(Test.class).setParameter("sellShare", 1).setParameter("validate", 1)).list(); 

迭代測試列表,並獲取value.Hope這項工作。

0

對於您的查詢,您可以使用ResultTransformer和Criteria.DISTINCT_ROOT_ENTITY。例如:

Query query1 = session.createSQLQuery(
      //"select transactions.userId from transactions where transactions.id in (select tickets.transactionId from tickets where tickets.validate=:validate and tickets.auctionId in (select id from auctions where sellShare=:sellShare)) group by transactions.userId") 
      "select transactions.userId, auctions.id from auctions inner join (tickets inner join transactions on tickets.transactionId = transactions.id) on auctions.id = tickets.auctionId where auctions.sellShare = :sellShare and tickets.validate=:validate") 
      .addEntity(Test.class).setParameter("sellShare", 1).setParameter("validate", 1).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
    List<Test> tests = query1.list();