Spring JPA - 插入数据库时出现"无效列索引"



当尝试在父表(DART_ORDER)中插入1条记录时,我面临一个问题)和连接到父表(DART_ODATE)的子表中的2条记录。). 这两个表通过OneToMany-ManyToOne关系链接,如下所示:

@Getter
@Setter
@ToString
@NoArgsConstructor
@Accessors(chain = true)
@Entity
@Table(
name = "DART_ORDER",
schema = Constants.ORACLE_DB_SCHEMA
)
public class OrderDAO implements Serializable {
@NotNull
private String WHY;
@NotNull
private String WHO;
@Id
@NotNull
private String ORDERID;
private String DESCRIPTION;
@NotNull
private String STATUS;
@NotNull
private String COUNTRY;
@NotNull
private String TYPE;
@NotNull
private String REPETITION;
private String REF_REFORDERID;
@OneToMany(mappedBy = "ORDER", cascade = CascadeType.ALL)
@OrderBy("DID ASC")
@ToString.Exclude
private List<OrderDateDAO> DATES;
@OneToMany(mappedBy = "ORDER", cascade = CascadeType.ALL)
@OrderBy("DID ASC")
@ToString.Exclude
private List<OrderDocDAO> DOCS;
}
@Getter
@Setter
@ToString
@NoArgsConstructor
@Accessors(chain = true)
@Entity
@Table(
name = "DART_ODATE",
schema = Constants.ORACLE_DB_SCHEMA,
indexes = @Index(
name = "PK_DART_ODATE",
columnList = "REF_ORDERID, ODTTYPE",
unique = true
)
)
@IdClass(OrderDateDAO.class)
public class OrderDateDAO implements Serializable {
@NotNull
private String WHY;
@NotNull
private String WHO;
@Id
@NotNull
private String REF_ORDERID;
@Id
@NotNull
private String ODTTYPE;
@NotNull
private LocalDate ODATE;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "REF_ORDERID", referencedColumnName = "ORDERID", insertable = false, updatable = false)
@ToString.Exclude
private OrderDAO ORDER;
}

当我尝试保存给出完整OrderDAO对象的记录时,我得到以下异常:

原因:java.sql.SQLException: Invalid column indexoracle.jdbc.driver.OraclePreparedStatement.setFormOfUseInternal (OraclePreparedStatement.java: 10470)oracle.jdbc.driver.OraclePreparedStatement.setFormOfUseInternal (OraclePreparedStatement.java: 10451)oracle.jdbc.driver.OraclePreparedStatement.setString (OraclePreparedStatement.java: 5240)oracle.jdbc.driver.OraclePreparedStatementWrapper.setString (OraclePreparedStatementWrapper.java: 255)com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setString (HikariProxyPreparedStatement.java)org.hibernate.type.descriptor.sql.VarcharTypeDescriptor dobind 1.美元(VarcharTypeDescriptor.java: 46)org.hibernate.type.descriptor.sql.BasicBinder.bind (BasicBinder.java: 73)org.hibernate.type.AbstractStandardBasicType.nullSafeSet (AbstractStandardBasicType.java: 276)org.hibernate.type.AbstractStandardBasicType.nullSafeSet (AbstractStandardBasicType.java: 271)org.hibernate.type.ComponentType.nullSafeSet (ComponentType.java: 340)org.hibernate.persister.entity.AbstractEntityPersister.dehydrateId (AbstractEntityPersister.java: 3121)org.hibernate.persister.entity.AbstractEntityPersister.dehydrate (AbstractEntityPersister.java: 3079)org.hibernate.persister.entity.AbstractEntityPersister.insert (AbstractEntityPersister.java: 3372)…87

通过启用Hibernate的SQL语句的日志,我注意到DART_ODATE表的insert语句具有正确的号。符号作为参数,但是,没有明显的原因,下面的日志显示传递了7个参数,而不是6个,其中1似乎为null

2022-05-03T13:27:24,074 TRACE [http-nio-8080-exec-5] o.h.t.d.s.BasicBinder: binding parameter [4] as [VARCHAR] - [null]

我真的不知道为什么它一直考虑额外的1个参数,因为DAO中唯一额外的映射集是JoinColumn一个…此外,我已经尝试将我的SpringBoot和Hibernate验证器版本升级到最新版本,但我仍然得到了错误。

你们中有人遇到过同样的问题吗?

谢谢。

问候,点

我终于明白了我的错误!

问题与错误使用JoinColumn注释有关。基本上,我删除了ORDER属性,并更改父DATES属性如下:

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "REF_ORDERID", referencedColumnName = "ORDERID")
@ToString.Exclude
private List<OrderDateDAO> DATES;

使用单向关系,INSERT语句工作得很好!: -)

最新更新