HQL join仅返回前两行

时间:2017-12-12 08:45:14

标签: java hibernate

我尝试连接两个表并使用hibernate查询从sql数据库中获取所有行。我有两个映射文件Offer.hmb.xml和Product.hbm.xml。在我的Products类中,我有这个功能:

public List<Product> getProducts() {
    factory = (new Configuration()).configure().buildSessionFactory();
    Session session = factory.getCurrentSession();

    session.beginTransaction();

    List<Product> products = new ArrayList<Product>();
    Product q = new Product();
    Query query = session.createQuery("select p from Product p JOIN p.offers o where p.offerID = o.offerID or p.offerID = null"); 
    List<Product> list =  query.list();
    Iterator<Product> iter = list.iterator();

    while (iter.hasNext()) {
        Product product = iter.next();
        System.out.println(product);
    }

产品映射:

<hibernate-mapping>
<class name="shoppingbasket.Product" table="products">
    <id name="productID" type="integer" access="field">
        <column name="ProductID" />
        <generator class="assigned" />
    </id>
    <property name="offerID" type="java.lang.Integer" access="field">
        <column name="OfferID" />
    </property>
    <property name="productName" type="java.lang.String" access="field">
        <column name="ProductName" length="40" not-null="true"/>
    </property>
    <property name="unitPrice" type="java.math.BigDecimal" access="field">
        <column name="UnitPrice"/>
    </property>
    <one-to-one name="offers" class="shoppingbasket.Offer" />
</class>
</hibernate-mapping>

提供映射:

<hibernate-mapping>
<class name="shoppingbasket.Offer" table="offers">
    <id name="offerID" type="integer" access="field">
        <column name="OfferID" />
        <generator class="assigned" />
    </id>
    <property name="offerDescription" type="java.lang.String" access="field">
        <column name="OfferDescription" length="60" not-null="true"/>
    </property>
    <property name="shortDescription" type="java.lang.String" access="field">
        <column name="ShortDescription" length="10" not-null="false"/>
    </property>
    <property name="TFTPOTGroup" type="java.lang.Integer" access="field">
        <column name="TFTPOTGroup" length="4" not-null="false" default="null"/>
    </property>
    <property name="discountPercentage" type="java.lang.Double" access="field">
        <column name="DiscountPercentage"  not-null="false" default="null"/>
    </property>
</class>
</hibernate-mapping>

查询运行但只返回前两行但是如果我将查询转换为SQL并在phpmyadmin中运行它会返回所有行。我究竟做错了什么?我是Java和HQL的新手,任何指针/帮助都会受到赞赏

0 个答案:

没有答案