IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

hibernate : Impossible de définir la valeur du champ [410] par réflexion RSS Feed


Sujet :

Hibernate Java

  1. #1
    Membre régulier Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Points : 78
    Points
    78
    Par défaut hibernate : Impossible de définir la valeur du champ [410] par réflexion RSS Feed
    Bonjour,
    Je travaille avec le site «openfights.org». J'importe mes données.
    J'ai une persistance «MyApp», 4 classes: Aireline, Airport, Route et RouteId. J'utilise H2 comme base de données. J'ai une classe ImportData pour importer mes données du site openfights.org.
    Lors de l’importation des lignes aériennes et aéroportuaires, les données sont bien remplies.
    le problème est que pour la classe Route, je devais faire une classe RouteId car j’avais plusieurs clés primaires.
    Hibernate soulève une exception.

    Classe Route :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    @Entity
    public class Route {
     
    @EmbeddedId
    private RouteId id;
     
    private String airlineCode;
     
    @ManyToOne
    @MapsId("airlineId")
    private Airline airline;
     
    private String sourceCode;
     
    @ManyToOne
    @MapsId("sourceId")
    private Airport source;
     
    private String destinationCode;
     
    @ManyToOne
    @MapsId("destinationId")
    private Airport destination;
     
    private Boolean codeshare;
     
    private Short stops;
     
    private String equipment;
     
    public RouteId getId() {
        return id;
    }
     
    public void setId(RouteId id) {
        this.id = id;
    }
     
    public String getAirlineCode() {
        return airlineCode;
    }
     
    public void setAirlineCode(String airlineCode) {
        this.airlineCode = airlineCode;
    }
     
    public Airline getAirline() {
        return airline;
    }
     
    public void setAirline(Airline airline) {
        this.airline = airline;
    }
     
    public String getSourceCode() {
        return sourceCode;
    }
     
    public void setSourceCode(String sourceCode) {
        this.sourceCode = sourceCode;
    }
     
    public Airport getSource() {
        return source;
    }
     
    public void setSource(Airport source) {
        this.source = source;
    }
     
    public String getDestinationCode() {
        return destinationCode;
    }
     
    public void setDestinationCode(String destinationCode) {
        this.destinationCode = destinationCode;
    }
     
    public Airport getDestination() {
        return destination;
    }
     
    public void setDestination(Airport destination) {
        this.destination = destination;
    }
     
    public Boolean getCodeshare() {
        return codeshare;
    }
     
    public void setCodeshare(Boolean codeshare) {
        this.codeshare = codeshare;
    }
     
    public Short getStops() {
        return stops;
    }
     
    public void setStops(Short stops) {
        this.stops = stops;
    }
     
    public String getEquipment() {
        return equipment;
    }
     
    public void setEquipment(String equipment) {
        this.equipment = equipment;
    }
     
    }


    Classe RouteId :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    @Embeddable // The Java class for mapped type “flights.RouteId” is final
    public class RouteId implements Serializable {
     
    private static final long serialVersionUID = -2403746842148223177L;
     
    // assuming all Long ids
    private int airlineId;
    private int sourceId;
    private int destinationId;
    public int getAirlineId() {
    return airlineId;
    }
    public void setAirlineId(int airlineId) {
    this.airlineId = airlineId;
    }
    public int getSourceId() {
    return sourceId;
    }
    public void setSourceId(int sourceId) {
    this.sourceId = sourceId;
    }
    public int getDestinationId() {
    return destinationId;
    }
    public void setDestinationId(int destinationId) {
    this.destinationId = destinationId;
    }
    public static long getSerialversionuid() {
    return serialVersionUID;
    }
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + airlineId;
    result = prime * result + destinationId;
    result = prime * result + sourceId;
    return result;
    }
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    RouteId other = (RouteId) obj;
    if (airlineId != other.airlineId)
    return false;
    if (destinationId != other.destinationId)
    return false;
    if (sourceId != other.sourceId)
    return false;
    return true;
    }
     
    // Omitted: constructors, getters/setters
    // Omitted: equals, hashCode and toString methods
     
    }
    ma méthode d'importation des routes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    private static Route mapRoute(String[] data) {
    Route route = new Route();
     
        int i = 0;
     
        route.setAirlineCode( parseNull(data[i++], ImportData::nopParse) );
        Airline airline = new Airline();
        Integer airlineId = parseNull(data[i++], Integer::parseInt);
        if ( airlineId == null ) return null;
        if ( !existingAirline.contains(airlineId) ) return null;
        airline.setId( airlineId );
        route.setAirline( airline );
     
        route.setSourceCode(parseNull(data[i++], ImportData::nopParse));
        Airport source = new Airport();
        Integer sourceId = parseNull(data[i++], Integer::parseInt);
        if ( sourceId == null ) return null;
        if ( !existingAirport.contains(sourceId) ) return null;
        source.setId( sourceId );
        route.setSource(source);
     
        route.setDestinationCode(parseNull(data[i++], ImportData::nopParse));
        Airport dest = new Airport();
        Integer destId = parseNull(data[i++], Integer::parseInt);
        if ( destId == null ) return null;
        if ( !existingAirport.contains(destId) ) return null;
        dest.setId( destId );
        route.setDestination(dest);
     
        route.setCodeshare( parseNull(data[i++], ImportData::booleanParse) );
        route.setStops(parseNull(data[i++], Short::parseShort)  );
        route.setEquipment(parseNull(data[i++], ImportData::nopParse));
     
        return route;
    }

    Debug hibernate :

    Hibernate: insert into Airline (active, alias, callsign, country, iata, icao, name, airlineId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into Airline (active, alias, callsign, country, iata, icao, name, airlineId) values (?, ?, ?, ?, ?, ?, ?, ?)
    Hibernate: insert into Airline (active, alias, callsign, country, iata, icao, name, airlineId) values (?, ?, ?, ?, ?, ?, ?, ?)
    DEBUG (ImportData.java) - Stream opened to [https://raw.githubusercontent.com/jp...ta/routes.dat]
    Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Could not set field value [410] value by reflection : [class flights.RouteId.airlineId] setter of flights.RouteId.airlineId
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:787)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:765)
    at ImportData.importFromSource(ImportData.java:199)
    at ImportData.main(ImportData.java:230)
    Caused by: org.hibernate.PropertyAccessException: Could not set field value [410] value by reflection : [class flights.RouteId.airlineId] setter of flights.RouteId.airlineId
    at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:58)
    at org.hibernate.mapping.Component$ValueGenerationPlan.execute(Component.java:419)
    at org.hibernate.id.CompositeNestedGeneratedValueGenerator.generate(CompositeNestedGeneratedValueGenerator.java:97)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:105)
    at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67)
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:780)
    ... 3 more
    Caused by: java.lang.NullPointerException
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:57)
    at sun.reflect.UnsafeIntegerFieldAccessorImpl.set(UnsafeIntegerFieldAccessorImpl.java:75)
    at java.lang.reflect.Field.set(Field.java:764)
    at org.hibernate.property.access.spi.SetterFieldImpl.set(SetterFieldImpl.java:38)
    ... 11 more

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 938
    Points : 4 359
    Points
    4 359
    Par défaut
    Quand Route est nouveau, son RouteId id n'a jamais été initialisé.

  3. #3
    Membre régulier Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Points : 78
    Points
    78
    Par défaut
    bonjour JeitEmgie
    Comment vois tu le codage pour inisialiser le RouteId ?
    que faut t'il faire?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 938
    Points : 4 359
    Points
    4 359
    Par défaut
    Citation Envoyé par philo71 Voir le message
    bonjour JeitEmgie
    Comment vois tu le codage pour inisialiser le RouteId ?
    que faut t'il faire?

  5. #5
    Membre régulier Avatar de philo71
    Profil pro
    Account manager
    Inscrit en
    Avril 2005
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Account manager

    Informations forums :
    Inscription : Avril 2005
    Messages : 242
    Points : 78
    Points
    78
    Par défaut
    merci, mais je ne vois pas ou placer le code que tu m'as donné ?

    Dans la classe Route, RouteId ou l'import?

    Montre moi ou tu place l'instance de id ?

Discussions similaires

  1. [AC-2010] Erreur1004 Impossible de définir la valeur de l'axe
    Par Phoebe33 dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/08/2016, 13h05
  2. [AC-2007] Casse : savoir si valeur de champ commence par majuscule ?
    Par Gregorx dans le forum VBA Access
    Réponses: 6
    Dernier message: 30/11/2011, 22h46
  3. Réponses: 2
    Dernier message: 14/12/2009, 07h33
  4. [PEAR][HTML_QuickForm] Définir une valeur à un champ
    Par icar3082 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 05/04/2007, 13h16
  5. Réponses: 2
    Dernier message: 05/10/2005, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo