2016-05-30 2 views
2

Dans mon projet, j'utilise hibernate Envers (version 4.3.7) avec Spring et MySql (version 5.6.25) pour auditer certaines entités.HIbernate Envers @AuditMappedBy cause SQLException: index de paramètre hors plage

Ceci est mon exemple:

@Audited 
@Entity 
@Table(name = "ticket") 
public class Ticket implements java.io.Serializable { 

    .... 

    private List<Payment> payments = new ArrayList<>(0); 

    .... 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "ticket") 
    @AuditMappedBy(mappedBy = "ticket") 
    public List<Payment> getPayments() { 
     return this.payments; 
    } 

    public void setPayments(List<Payment> payments) { 
     this.payments= payments; 
    } 
    ... 
} 


@Audited 
@Entity 
@Table(name = "payment") 
public class Payment implements java.io.Serializable { 

    .... 

    private Ticket ticket; 
    private Long ticketId; 


    .... 

    @Column(name = "TICKET_ID", nullable = false) 
    public Long getTicketId() { 
     return ticketId; 
    } 

    public void setTicketId(Long ticketId) { 
     this.ticketId = ticketId; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "TICKET_ID", nullable = false, insertable = false, updatable = false) 
    public Ticket getTicket() { 
     return this.ticket; 
    } 

    public void setTicket(TktTicket ticket) { 
     this.ticket= ticket; 
    } 

    ...... 
} 

lorsque vous essayez d'insérer un nouveau ticket le système retourne l'exception:

org.hibernate.exception.GenericJDBCException: n'a pas pu insérer: .. ... causés par: java.sql.SQLException: Index de paramètres hors de portée (19> nombre de paramètres, ce qui est 18)

Une certaine idée?

+0

Vous avez une erreur dans votre index de base de données, vous pouvez changer votre index puis essayez d'insérer à nouveau, bonne chance –

+0

Désolé, pouvez-vous me donner un exemple? Je n'ai pas compris votre commentaire. Réservoirs. –

+0

Testez ceci et si vous ne réussissez pas ALTER TABLE your_table AUTO_INCREMENT = 20; SAUF comment paramettre avez-vous dans vos entités? –

Répondre

0

J'ai résolu. Dans la classe de paiement Je modifié la référence au billet:

ancien code:

@Column(name = "TICKET_ID", nullable = false) 
public Long getTicketId() { 
    return ticketId; 
} 

public void setTicketId(Long ticketId) { 
    this.ticketId = ticketId; 
} 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "TICKET_ID", nullable = false, insertable = false, updatable = false) 
public Ticket getTicket() { 
    return this.ticket; 
} 

public void setTicket(TktTicket ticket) { 
    this.ticket= ticket; 
} 

Nouveau code:

@Column(name = "TKT_TICKET_ID", nullable = false, insertable = false, updatable = false) 
    public Long getTicketId() { 
     return ticketId; 
    } 

    public void setTicketId(Long ticketId) { 
     this.ticketId = ticketId; 
    } 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "TKT_TICKET_ID", nullable = false) 
    public TktTicket getTktTicket() { 
     return this.tktTicket; 
    } 

    public void setTktTicket(TktTicket tktTicket) { 
     this.tktTicket = tktTicket; 
    } 

J'ai enlevé le "insérable = false, actualisable = false" de getTktTicket() et ajouté à getTicketId(). Peut-être que c'est un bug d'Envers.