Hibernate + MSSQL - NullPointerException w zapytaniu HQL left join

0

Mam dwie tabele w relacyjnej bazie danych MSSQL

Towary
id(Integer, not null)
nazwa(String, not null)
dostawca(Integer, null)
odbiorca(Integer, null)

Kontrahenci
id(Integer, not null)
nazwa(String, not null)

Za pomocą reverse engineering zostały stworzone klasy Towary i Kontrahenci. Ogólnie rzecz biorąc wszytko działa, ale w momencie gdy w wyniku dostawca IS Null, wysypuje się. Oczywiście to zapytanie jako SQL w managment studio zwróci wynik, zawierający w danym wierszu w polach Kontrahenci.id Kontrahenci.Nazwa wartość Null

Kombinuję coś z @Column(nullable=true) ale albo nie o to chodzi, albo coś źle robię.

Jeżeli potrzebujecie szczegółów klasy czy xml to dajcie znać - ale podejrzewam, że to jakaś oczywista sprawa i obędzie się bez tego.

0

poproszę pół na pół, abo nie, telefon do przyjaciela :) żarcik

za mało info jak dla mnie, jakie są relacje między Towary i Kontrahenci? OneToOne, ManyToOne, ManyToMany? Może brakuje gdzieś FK? Tylko zgaduję...

0

Towary.hbm.xml

<hibernate-mapping>
    <class name="entities.Towary" table="Towary" schema="dbo" catalog="Dr" optimistic-lock="version">
        <many-to-one name="kontrahenci" class="entities.Kontrahenci" fetch="select">
            <column name="Dostawca" />
        </many-to-one>
(...)
    </class>
</hibernate-mapping>

Kontrahenci.hbm.xml

<hibernate-mapping>
    <class name="entities.Kontrahenci" table="Kontrahenci" schema="dbo" catalog="Dr" optimistic-lock="version">
(...)
        <set name="towaries" table="Towary" inverse="true" lazy="true" fetch="select">
            <key>
                <column name="Dostawca" />
            </key>
            <one-to-many class="entities.Towary" />
        </set>
    </class>
</hibernate-mapping>

Przykładowe zapytanie HQL
select Towary.nazwa, Kontrahenci.nazwa from Towary as Towary left join Towary.kontrahenci as Kontrahenci where Towary.kod = '0100001'
To zapytanie zwraca dwie nazwy dla towaru, który ma przypisanego dostawcę i błąd dla towaru, który nie ma przypisanego dostawcy (czyli Towary.Dostawca IS NULL)

Wyciąłem to co moim zdaniem jest potrzebne, ale że mam blade pojęcie o tym co robię to jak by było potrzebne coś jeszcze to napisz proszę jak dziecku co :)

0

A w jakim sensie się wysypuje? Program przestaje działać, czy jest jakiś wyjątek? Masz jakieś logi?
Powiem tak, że główkuję nad tym i wszystko wygląda dobrze. Spróbuj może zamiast samego left join, napisać left join fetch i daj znać, czy jest ten sam efekt.

Jeszcze taka drobna sprawa, żeby aliasy pisać z małej litery, bo tak jest ładniej :)

select Towary.nazwa, Kontrahenci.nazwa from Towary as towary left join towary.kontrahenci as kontrahenci where Towary.kod = '0100001'

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