我有架構兩個表如下:單向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