我有架构两个表如下:单向JPA一对多映射 - ORA-01722:无效号码
表1
table1_id(PK)(整数)
名称
表2
table2_id(pk)(String)
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
看起来有些不匹配。它似乎是使用字符串“table2_id”查询Table1,因为它应该使用“table1_id”
请帮忙!
有一个名称冲突在映射:'@JoinColumn( (table1.id1)上的'table1_id')'与'Table1.id'上的'@Id @Column(name =“table1_id”)''。请注意,连接列进入'Table1',**而不是**'Table2'。 – crizzis
@crizzis,我意识到连接列应该在“许多”旁边表中即。表格1 。然而,这个数据库模式是旧的,修改可能并不容易。无论如何,无需将连接列移动到Table1就可以工作?谢谢。 – Surbhi
我不认为我遵循。你怎么能在* one *边上的连接列上有*一对多*关联?当有多个'Table1'与'Table2'关联时,您计划在哪里存储它们的ID? – crizzis