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

单向JPA OnetoMany映射-ORA-01722:无效数字

顾淳
2023-03-14

我有两个表,模式如下:

表1

table1_id(pk)(整数)

姓名

表2

table2_id(pk)(字符串)

table1_id(pk)(整数)

姓名

我的代码看起来像这样

@Entity
@Table(name = "Table2")
class Table2 {

    @Id
    @Column(name = "table2_id")  
    private String id;

    @Column(name="name")
    private String name;

    @OneToMany
    @JoinColumn (name="table1_id")
    private Set<Table1> table1Set = new HashSet<>();


    //setters and getters
}

@Entity
@Table(name = "Table1")
class Table1 {

    @Id
    @Column(name = "table1_id")  
    private int id;

    @Column(name="name")
    private String name;

    //setters and getters
}

现在当我查询:Table2Repository.findById("One")

我得到以下错误:

Hibernate: select table2.id as table2_id_1_, table2.name as name2_1_ from table2 table20_
Hibernate: select table10_.table1_id as table1_id1_1_0_, table1_.table1_id as table1_id1_0_0_, table10_.table1_id as table1_id1_0_1_, table10_.name as name2_0_1_ from table1 table10_ where table10_.table1_id=?
2017-07-25 12:53:11.352  WARN 11572 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1722, SQLState: 42000
2017-07-25 12:53:11.352 ERROR 11572 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : ORA-01722: invalid number

似乎出现了一些不匹配。它似乎使用字符串“表2_id”来查询表1,而它应该使用“表1_id”

好心帮忙!

共有1个答案

辛盛
2023-03-14

您的映射中存在名称冲突:< code>Table2.table1Set上的< code > @ join Column(name = " table 1 _ Id ")与< code>Table1.id上的< code > @ Id @ Column(name = " table 1 _ Id ")。请注意,联接列进入< code>Table1,而不是< code>Table2。

您的意思可能是这样的模式:< code>PERSON(id,name,age,a_bunch_of_other_stuff),< code > PERSON _ PHONE _ NUMBER(PERSON _ id,phone_id),< code>PHONE_NUMBER(id,phone_number),在这种情况下,您的映射应该如下所示:

@Entity
@Table(name = "PERSON")
public class Person {

    @Id
    private int id;

    private String name;
    ...

    @OneToMany
    @JoinTable(name = "PERSON_PHONE_NUMBER", 
        joinColumns = @JoinColumn(name = "PERSON_ID", referencedColumnName = "ID"), 
        inverseJoinColumns = @JoinColumn(name = "PHONE_ID", referencedColumnName = "ID")
    )
    private Set<PhoneNumber> phoneNumbers;
    ...
}

@Entity
@Table(name = "PHONE_NUMBER")
public class PhoneNumber {

    @Id
    private String id;

    @Column(name = "PHONE_NUMBER")
    private String phoneNumber;
    ...
}
 类似资料:
  • 我正在尝试使用带有Hibernate的Map创建一个简单的程序。我有一个带有州地图的Country实体。这是我的类: 以下是我创建一些国家和州的计划: 当我尝试运行此程序时,我得到的异常为: 我在第< code >行session.save(country)处得到此异常;请告诉我为什么会出现这个错误? 更新: 根据JB给出的答案,现在我在Country和State中添加了到我的Id中。这次我开始得

  • 我正在我的Oracle客户机中运行下面提到的查询,我得到了 ORA-01722:无效号码 错误。我知道这个问题是由于TAG_VALUE列的类型是“”,我正在将其转换为数字,然后在where子句中使用该字段。我尝试过使用“”功能,但这也没有帮助。如果我运行查询时忽略了最后一个 where 条件,代码为

  • 我在包裹抛出错误中有一个查询 ORA-01722:无效号码。 我试了很多方法,但都没有成功。 null 请给我建议解决办法

  • 对于某人来说,这是一个非常简单的方法,下面的插入内容给了我 ORA-01722:无效的数字 为什么?

  • 我不明白为什么我会犯这个错误。 当我对交互式报表执行此查询时,它会引发 ORA-01722 错误。此查询不仅在 SQL 开发人员中正确运行,而且作为经典报表正确运行。当我将类型更改为交互式报表时,再次抛出相同的错误。 我该怎么办? 提前多谢。

  • 当我想比较这两列时,它向我显示了这个menssage,没有“where子句”,没有任何错误,但是当我写“where”时,错误就出现了 这是我的sql句子: 月经错误:ORA-01722:无效号码01722。00000 - “无效号码” *原因:指定的号码无效。*操作: 指定一个有效的数字。