【问题标题】:Hibernate query returns a list of equals valueHibernate 查询返回一个等于值的列表
【发布时间】:2015-10-11 21:58:37
【问题描述】:

我有这个问题:

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 中返回正确的字段。

这里是Test的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>

【问题讨论】:

  • 你试过select disctinct transactions.userId .......吗?
  • 您是否尝试过使用 Distinct 进行相同的查询? stackoverflow.com/questions/263850/…
  • 不,我没试过,我现在就在做

标签: java jquery mysql


【解决方案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();

迭代测试列表并获取值。希望这项工作。

【讨论】:

    【解决方案2】:

    您可能可以将带有 Criteria.DISTINCT_ROOT_ENTITY 的 ResultTransformer 用于您的查询。例如:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 2021-07-11
      • 1970-01-01
      相关资源
      最近更新 更多