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

JPA Java Discussion :

JPA bloque lors de la mise à jour d'une date


Sujet :

JPA Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut JPA bloque lors de la mise à jour d'une date
    Bonsoir à tous.
    Voici mon problème étrange qui me fait fumer le cerveau depuis 3h.
    J'ai une application J2EE et je persiste avec JPA.
    L'une de mes Entités "Event" contient des dates (début et fin).
    Lors d'une mise à jour de Event, avec un merge, tous les champs se mettent correctement à jour, excepté les champs de date qui reste à la même valeur que lors de la création.
    Je ne comprends pas pourquoi...

    Voici le code de mon Entity (partiel)

    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
     
    package persistence;
     
    import java.util.Date;
    ...
     
    /**
     *
     * @author gaelvarlet
     */
    @Entity
    public class Event implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
     
        @Column(name = "NAME")
        private String name;
        @Column(name = "PLACE")
        private String place;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "BEGINDATE")
        private Date beginDate;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "ENDDATE")
        private Date endDate;
        @Column(name = "VISIBILITY")
        private int visibility;
        @Column(name = "DESCRIPTION")
        private String description;
     
        @OneToMany(mappedBy="relatedEvent")
        private List<CustomizeEvent> customizedEvents;
     
        @OneToOne(cascade = CascadeType.PERSIST,optional=false)
        private Periodicity periodicity;
     
        @ManyToOne(optional=false)
        private UserAgenda eventOwner;
     
        @ManyToMany
        @JoinTable(name="EVENTS_BELONG_AGENDAS",joinColumns= @JoinColumn(name="EVENT_ID",referencedColumnName="ID"),inverseJoinColumns=@JoinColumn(name="AGENDA_ID",referencedColumnName="ID"))
        private List<Agenda> belongToAgendas;
     
        @ManyToMany
        @JoinTable(name="EVENTS_GUESTS_AGENDAS",joinColumns= @JoinColumn(name="EVENT_ID",referencedColumnName="ID"),inverseJoinColumns=@JoinColumn(name="AGENDA_ID",referencedColumnName="ID"))    
        private List<Agenda> guestToAgendas;
     
        public Event() {
        }
     
        public Event(String name, String place, Date beginDate, Date endDate, int visibility, String description, Periodicity periodicity, UserAgenda eventOwner, Agenda agenda) {
            this.name = name;
            this.place = place;
            this.beginDate = beginDate;
            this.endDate = endDate;
            this.visibility = visibility;
            this.description = description;
            this.periodicity = periodicity;
            this.eventOwner = eventOwner;
            this.belongToAgendas = new ArrayList<Agenda>();
            this.belongToAgendas.add(agenda);
            this.customizedEvents = new ArrayList<CustomizeEvent>();
            this.guestToAgendas = new ArrayList<Agenda>();
        }
     
        public Event(String name, String place, Date beginDate, Date endDate, int visibility, String description, Periodicity periodicity, UserAgenda eventOwner, Agenda agenda,List<Agenda> guests) {
            this.name = name;
            this.place = place;
            this.beginDate = beginDate;
            this.endDate = endDate;
            this.visibility = visibility;
            this.description = description;
            this.periodicity = periodicity;
            this.eventOwner = eventOwner;
            this.belongToAgendas = new ArrayList<Agenda>();
            this.belongToAgendas.add(agenda);
            this.customizedEvents = new ArrayList<CustomizeEvent>();
            this.guestToAgendas = guests;
        }
     
     
        // getters and setters
     
        @Override
        public int hashCode() {
            int hash = 0;
            hash += (id != null ? id.hashCode() : 0);
            return hash;
        }
     
        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Event)) {
                return false;
            }
            Event other = (Event) object;
            if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
                return false;
            }
            return true;
        }
     
     
    }
    Et voici la fonction appelée dans un managed bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void setNewEndDate(Event event, Date endDate) {
            Event e = em.find(Event.class, event.getId());
            e.setEndDate(endDate);
            long ide = event.getId();
     
            e.setDescription("New description");
            em.persist(e);
        }

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Remplace tes dates par des java.sql.Timestamp et reteste.

    L'annotation @Temporal prend effectivement des java.util.Date et Calendar, mais le type à mettre lorsque tu spécifies le TemporalType varie.

    La javadoc dit que pour un TemporalType TIMESTAMP, il faut un java.sql.Timestamp.

Discussions similaires

  1. Code lors de la mise à jour d'une cellule
    Par Prof_Matches dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/01/2012, 12h07
  2. Réponses: 12
    Dernier message: 14/06/2011, 09h04
  3. Réponses: 0
    Dernier message: 14/04/2010, 11h32
  4. [AC-2003] Erreur lors de la mise à jour d'une table SQL Server 2008
    Par suziwan dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/12/2009, 22h06

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