HIbernate Envers @AuditMappedBy 导致 SQLException:参数索引超出范围
HIbernate Envers @AuditMappedBy cause SQLException: Parameter index out of range
在我的项目中,我将休眠 Envers (v. 4.3.7) 与 Spring 和 MySql (v. 5.6.25) 一起用于审计一些实体。
这是我的例子:
@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;
}
......
}
当尝试向系统插入新票时 return 异常:
org.hibernate.exception.GenericJDBCException:无法插入:
.....
Caused by: java.sql.SQLException: Parameter index out of range (19 > parameters number, is 18)
有什么想法吗?
我解决了。 Into Payment class 我修改了对 Ticket 的引用:
旧代码:
@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;
}
新代码:
@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;
}
我从 getTktTicket() 中删除了 "insertable = false, updatable = false" 并添加到 getTicketId()。也许这是Envers的一个bug。
在我的项目中,我将休眠 Envers (v. 4.3.7) 与 Spring 和 MySql (v. 5.6.25) 一起用于审计一些实体。
这是我的例子:
@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;
}
......
}
当尝试向系统插入新票时 return 异常:
org.hibernate.exception.GenericJDBCException:无法插入: ..... Caused by: java.sql.SQLException: Parameter index out of range (19 > parameters number, is 18)
有什么想法吗?
我解决了。 Into Payment class 我修改了对 Ticket 的引用:
旧代码:
@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;
}
新代码:
@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;
}
我从 getTktTicket() 中删除了 "insertable = false, updatable = false" 并添加到 getTicketId()。也许这是Envers的一个bug。