JPA klauzula WHERE

0

Witam serdecznie wszystkich.

Mam problem z aplikacją Webową. Mianowicie mam następujące wywołanie query:

 
List<Trasa> trasy = null;
trasy = manager.createNamedQuery("selectTrasy")
                .setParameter("raportId", propertyWydatek.getRaport().getId())
                .getResultList();

Encje wyglądają następująco:

 
@NamedQuery(name = "selectTrasy",
        query = "SELECT t FROM Trasa t WHERE t.raport.id = :raportId ORDER BY t.id")
@Entity
public class Trasa  implements Serializable {
    @Id
    @Column(name = "id", unique = true )
    @GeneratedValue
    private Long id;
    
    @Column(name = "data_z")
    private Date dataz;
    
    @Column(name = "data_do")
    private Date datado;
    
    @Column(name = "czas_z")
    private String czasZ;
    
    @Column(name = "czas_do")
    private String czasDo;
    
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "miejscowosc_z")
    private MiejscowoscDB miejscowoscZ;
    
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "miejscowosc_do")
    private MiejscowoscDB miejscowoscDo;
    
    @OneToOne(fetch = FetchType.LAZY)
    private Uzytkownik user;
    
    @OneToOne(fetch = FetchType.LAZY)
    private Raport raport;

    //gettery i settery
}
@Entity
public class Raport  implements Serializable {
    @Id
    @Column(name = "id", unique = true )
    @GeneratedValue
    private Long id;
    
    @Column(name = "data")
    private Date data;
    
    @Column(name = "nazwa")
    private String nazwa;
    
    @Enumerated(EnumType.STRING)
    private Powod powod;

    @OneToOne(fetch = FetchType.EAGER)
    private Uzytkownik uzytkownik;
   
    //gettery i settery
}

To co zwraca Hibernate w trybie debug to:

select trasa0_.id as id1_2_, trasa0_.czas_do as czas_do2_2_, trasa0_.czas_z as czas_z3_2_, trasa0_.data_do as data_do4_2_, trasa0_.data_z as data_z5_2_, trasa0_.miejscowosc_do as miejscow6_2_, trasa0_.miejscowosc_z as miejscow7_2_, trasa0_.raport_id as raport_i8_2_, trasa0_.user_id as user_id9_2_ from Trasa trasa0_ where trasa0_.raport_id=? order by trasa0_.id
12:33:56,031 TRACE BasicBinder:81 - binding parameter [1] as [BIGINT] - [23]

Jak widać wartość zbindowana id to 23. Kiedy wstawię to zapytanie do narzędzia od bazy danych z podaną wartością raport_id=23, to query zwraca mi rekord, natomiast w aplikacji w wywołaniu funkcji, którą podałem na początku postu, lista jest pusta.

0

Przypuszczam, że problemem jest inicjalizacja leniwa:

@OneToOne(fetch = FetchType.LAZY)
    private Raport raport;

W zapytaniu próbujesz odwołać się pola raport, które nie jest wczytane. Zmień fetch na EAGER lub zmodyfikuj zapytanie używając FETCH JOIN.

0

query = "FROM Trasa t join fetch t.raport where t.raport.id = :raportId ORDER BY t.id") a teraz?

0

Nikt, nic, żadnego pomysłu ??

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