Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Aiuto relazioni JPA

  1. #1

    Aiuto relazioni JPA

    ciao!

    allora, ho una tabella Timesheet:
    codice:
    package com.cies.api.models;
    
    
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import jakarta.persistence.*;
    import lombok.Getter;
    import lombok.Setter;
    
    
    import java.sql.Timestamp;
    import java.util.List;
    
    
    @Getter
    @Setter
    @Entity
    @Table(name = "Timesheet")
    public class Timesheet {
    
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "idTimeSheet")
      private Integer idTimeSheet;
    
    
      @Column(name = "codProgetto")
      private Integer codProgetto;
    
    
      @Column(name = "codCoordinatore")
      private Integer codCoordinatore;
    
    
      @Column(name = "codAnagrafica")
      private Integer codAnagrafica;
    
    
      @JsonIgnore
      @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
      @JoinColumn(name = "idAnagrafica")
      private Anagrafica anagrafica;
    
    
    }
    un Timesheet può avere un'Anagrafica.
    un'Anagrafica può avere N Timesheet.
    codice:
    package com.cies.api.models;
    
    
    import jakarta.persistence.*;
    import lombok.Getter;
    import lombok.Setter;
    
    
    import java.util.List;
    
    
    @Getter
    @Setter
    @Entity
    @Table(name = "Anagrafica")
    public class Anagrafica {
    
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "idAnagrafica")
      private int idAnagrafica;
    
    
      @Column(name = "Nome")
      private String nome;
    
    
      @Column(name = "Cognome")
      private String cognome;
    
    
      @Column(name = "CodiceFiscale")
      private String cdiceFiscale;
    
    
      @OneToMany(fetch = FetchType.EAGER, mappedBy = "anagrafica")
      private List<Timesheet> timesheetList;
    
    
    }
    già qua non so se ho fatto correttamente.

    cmq io interrogo direttamente la tabella Timesheet, e devo ottenere i dati di Anagrafica.
    ovviamente ottengo errore:
    codice:
    com.microsoft.sqlserver.jdbc.SQLServerException: Il nome di colonna 'idAnagrafica' non è valido.
    un aiuto??

  2. #2
    ho fatto diverse prove, tra cui questa è l'ultima:
    codice:
    @JoinColumn(name = "idAnagrafica")
    @ManyToOne(targetEntity = Anagrafica.class, fetch = FetchType.LAZY)
    @JsonIgnore
    private Anagrafica anagrafica;
    al momento sto usando una query custom con una join:
    codice:
      String queryByAnag = "SELECT idTimeSheet," +
          "codProgetto," +
          "codCoordinatore," +
          "codAnagrafica," +
          "Nominativo," +
          "OreConfermate," +
          "OreNonConfermate," +
          "Timesheet.Cancellato AS Cancellato," +
          "DataOraInizio," +
          "DataOraFine," +
          "MinLavorate," +
          "Nome," +
          "Cognome," +
          "CodiceFiscale " +
          "FROM Timesheet " +
          "INNER JOIN Anagrafica ON idAnagrafica = codAnagrafica " +
          "WHERE Timesheet.Cancellato = 0 " +
          "AND codAnagrafica = ? " +
          "ORDER BY DataOraInizio DESC;";
    
    
      @Query(value = queryByAnag, nativeQuery = true)
      List<Timesheet> getByCodAnagraficaOrderByDataOraInizioDesc(int codAnagrafica);
    ma non ottengo il risultato che vorrei, nel senso che io avrei bisogno di mettere Anagrafica come un oggetto del json.

    nessuno sa darmi una dritta?
    sennò mi toccherà cambiare e fare con jdbc e sotto query.

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,312
    L'unico problema che vedo, così a colpo d'occhio, è che nella classe Timesheet non hai dichiarato il campo "idAnagrafica", che è richiesto nella JoinColumn.
    Da qui l'eccezione che hai ottenuto da SQL Server.
    Corretto quello la prima implementazione che hai postato dovrebbe essere ok.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    L'unico problema che vedo, così a colpo d'occhio, è che nella classe Timesheet non hai dichiarato il campo "idAnagrafica", che è richiesto nella JoinColumn.
    Da qui l'eccezione che hai ottenuto da SQL Server.
    Corretto quello la prima implementazione che hai postato dovrebbe essere ok.
    ciao!

    si ci avevo pensato, ma nella tabella timesheet non ho un campo idAnagrafica.
    la join è fatta sul campo codAnagrafica.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,312
    E allora quella JoinColumn è scritta male:

    @JoinColumn(name = "nome del campo nella tabella di questa entity", referencedColumnName = "nome del campo nella tabella referenziata")
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    E allora quella JoinColumn è scritta male:

    @JoinColumn(name = "nome del campo nella tabella di questa entity", referencedColumnName = "nome del campo nella tabella referenziata")
    ahhhh ok!
    scusate, non avevo proprio capito questa cosa.
    così funziona!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.