JSF+Hibernate asocjacje

0

Witam
Mam problem związany z asocjacyjnym mapowaniem.
Chciałbym przy użyciu jsf wyświetlić dane z dwóch rożnych tabel które sa ze sobą połączone.

public class Bid {

    private Integer bidId;  
    private String amount;  
    private Item item;
    public Bid() {
    }
 
public class Item{
    private Integer itemId;  
    private String name;  
    private String descr;
    private Set<Bid> bidSet;
    public Item() {
    }
 

oczywiscie sa gety i setery,

<hibernate-mapping>
    <class name="model.Bid" table="bid">
    <id column="bid_id" name="bidId" type="int"/>
    <property column="amount" name="amount" not-null="true" type="string"/>
    <many-to-one column="item_id" name="item" not-null="true"/>
  </class>
  <class name="model.Item" table="item">
    <id column="item_id" name="itemId" type="int"/>
    <property column="name" name="name" not-null="true" type="string"/>
    <property column="descr" name="descr" not-null="true" type="string"/>
    <set name="bidSet" cascade="all" inverse="true" >
      <key column="item_id"/>
      <one-to-many class="model.Bid"/>
    </set>
  </class>

</hibernate-mapping>
 
@ManagedBean
@RequestScoped
public class Bean {

    public Bean() {
    }
 public List<Bid> getBid() {
        SessionFactory sf = HibernateUtil.getSessionFactory();
        Session s = sf.openSession();
        List<Bid> pp =(List<Bid>)s.createQuery("SELECT b FROM Bid b").list();
        s.close();
        return pp;
    }
 
    <f:view>
            <h:form>
                <h:dataTable value="#{Bean.bid}" var="bi" border="1" >
                    <h:column>
                        <h:outputText value="#{bi.amount}"/>
                    </h:column>
                    <h:column>
                        <h:outputText value="#{bi.bidId}"/>
                    </h:column>
                </h:dataTable>                      
             </h:form>
        </f:view>

Tak działa ale tylko z jednej tabeli pobiera dane.
chodzi mi głownie jak napisać metodę w Bean żebym mógł użyć zapytania z inner join, próbowałem rzutować na Object i nic nie wychodzi. I jak takie połączenie przedstawić w jsf

Pozdrawiam i gory dzieki,

0

Chcesz pobrać obiekty Item z relacja bidSet?
Wystarczy pobrać obiekt Item i wywołać getBidSet(). Jeżeli relacja nie jest gorliwa, to obiekty Bid dla danego Item zostaną wtedy pobrane. Musisz tylko pamiętać o tym, aby zrobić to przed zamknięciem sesji hibernate.

Możesz też pobrać obiekty Item z obiektami Bid od razu:
SELECT i FROM Item i LEFT JOIN FETCH i.bidSet

Mała uwaga - tworzenie SessionFactory za każdym razem to bardzo zły pomysł ze względu na wydajność.
Nie wolisz, aby transakcjami zarządzał Spring?

0

Dopiero rozpocząłem prace z hibernate wiec planuje po opanowaniu hibernate, spring poznać.

ustawilem lazy="false" i dziala

Dzieki

1 użytkowników online, w tym zalogowanych: 0, gości: 1