当前位置: 首页 > 知识库问答 >
问题:

Spring JPA-在DB中插入时的“无效列索引”

左丘积厚
2023-03-14

我在尝试在父表(DART\U ORDER)中插入1条记录,在连接到父表(DART\U ODATE)的子表中插入2条记录时遇到问题。这两个表由一对多对一关系链接,如下所示:

@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:oracle中的列索引无效。jdbc。驾驶员OraclePreparedStatement。oracle上的setFormOfUseInternal(OraclePreparedStatement.java:10470)。jdbc。驾驶员OraclePreparedStatement。oracle上的setFormOfUseInternal(OraclePreparedStatement.java:10451)。jdbc。驾驶员OraclePreparedStatement。oracle上的setString(OraclePreparedStatement.java:5240)。jdbc。驾驶员OraclePreparedStatementWrapper。com上的setString(OraclePreparedStatementWrapper.java:255)。扎克塞尔。希卡里。水塘HikariProxyPreparedStatement。org上的setString(HikariProxyPreparedStatement.java)。冬眠类型描述符。sql。VarcharTypeDescriptor$1。org上的doBind(VarcharTypeDescriptor.java:46)。冬眠类型描述符。sql。BasicBinder。bind(BasicBinder.java:73)位于org。冬眠类型AbstractStandardBasicType。位于org的nullSafeSet(AbstractStandardBasicType.java:276)。冬眠类型AbstractStandardBasicType。位于org的nullSafeSet(AbstractStandardBasicType.java:271)。冬眠类型组件类型。位于org的nullSafeSet(ComponentType.java:340)。冬眠持久化器。实体AbstractEntityPersister。Deterheoid(AbstractEntityPersister.java:3121)位于org。冬眠持久化器。实体AbstractEntityPersister。dehydrate(AbstractEntityPersister.java:3079)位于org。冬眠持久化器。实体AbstractEntityPersister。插入(AbstractEntityPersister.java:3372)。。。87个以上

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

2022-05-03T13:27:24074跟踪[http-nio-8080-exec-5]o.h.t.d.s.BasicBinder:绑定参数[4]为[VARCHAR]-[null]

老实说,我不知道为什么它一直在考虑另外一个参数,因为DAO中唯一的附加映射集是JoinCol列...此外,我已经尝试将我的SpringBoot和Hibernate Validator版本升级到最新版本,但我仍然有错误。

你们有没有遇到过同样的问题?

非常感谢。

问候,A. M.

共有1个答案

刁俊人
2023-03-14

我终于明白了我的错误!

该问题与JoinColumn注释的错误使用有关。基本上,我删除了*OrderDateDAO“中的ORDER属性,并更改了parent DATES属性,如下所示:

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

使用单向关系,INSERT语句就像一个符咒一样工作!:-)

 类似资料:
  • 我从API中得到了一个字符串列表,当我尝试插入Room Db时,我得到了一个错误- 参数的 这是它的桌子 我如何解决这个错误,或者有没有其他的方法让这个东西工作。

  • 我升级了jboss 7到10,但有一个奇怪的错误,我不明白为什么 例外情况: 原因:java.sql.SQLException:oracle.jdbc.driver.OraclePreparedStatementWrapper.setLongInternal(OraclePreparedStatement.java:4901)处的oracle.jdbc.driver.OraclePreparedS

  • 问题内容: 我可以在熊猫的特定列索引处插入列吗? 这会将列作为的最后一列,但是没有办法告诉它放在开始处吗? 问题答案: 参见文档:http : //pandas.pydata.org/pandas- docs/stable/genic/pandas.DataFrame.insert.html 使用loc = 0将在开头插入

  • 我在将字符串数组插入mongo DB时遇到问题。在数组的特定大小之后,驱动程序挂起-不会抛出异常(超时或错误)。当我缩短长度时,一切正常。有人能解释这种奇怪的行为吗?很抱歉这个newbee问题,但我找不到一个现有的问题。 Mongo DB版本 非工作文档

  • 有冬眠和MSSQL环境。我遇到了一个错误:“无法将值NULL插入到“comment_id”列中,表“CHT”。dbo。记者"点评";;列不允许空值。“插入失败。”Hibernate配置: comment_id列在db中具有标识属性:如果我使用db客户端进行插入: 它非常适合我。 Hibernate日志: SQL-插入REPORTER_COMMENTS(REPORTERID, COMMENT,COM