[英]Cannot add or update a child row: a foreign key constraint fails in hibernate
[英]Cannot add or update a child row: a foreign key constraint fails Hibernate
感谢Predrag Maric,我设法找到了一个bug,其中referencedColumnName没有引用正确的字段。 然后我不得不让Table2类实现Serializable接口,这使我的测试通过
谢谢你的帮助
如何在Hibernate中映射Table3?
这是我的尝试:
@Entity
@Table(name="Table3")
public class Table3 implements Serializable
{
@Id
@GeneratedValue
private long id;
@NotNull
@Column(name="field1")
private String field1;
@NotNull
@Column(name="field2")
private String field2;
@ManyToOne
@JoinColumn(name="Table2_id")
private Table2 Table2_id ;
@ManyToOne
@JoinColumn(name="Table2_Table1_username")
private Table2 Table2_Table1_username;
错误发生在我的JUnit测试中:
Cannot add or update a child row: a foreign key constraint fails (
数据库.
表3 , CONSTRAINT
fk_Table3_Table2 FOREIGN KEY (
Table2_id ,
Table2_Table1_username ) REFERENCES
Table2 (
id ,
Table1_username ) ON DELETE NO ACTION ON UPDATE NO ACTION)
构造函数:
Table3(String field1, String field2, Table2 table)
{
this.field1 = field1;
this.field2 = field2;
this.Table2_id = table;
this.Table2_Table1_username = table;
}
JUnit测试
@Before
public void init()
{
JdbcTemplate jdbc = new JdbcTemplate(dataSource);
jdbc.execute("DELETE FROM Table3");
jdbc.execute("DELETE FROM Table2");
jdbc.execute("DELETE FROM Table1");
}
@Test
public void testCreateMedia()
{
table1DAO.createTable(table1Object);
table2DAO.createTable(table2Object);
table3DAO.createTable(table3Object); //fails here
}
注意:我没有使用变量的java命名约定
我认为你在@JoinColumn
误解了name
和referencedColumnName
。
name
是source( Table3
)表中列的名称,该表是目标( Table2
)表的外键。
referencedColumnName
是目标表中列的名称,它是主键( Table2.id
)。 在大多数情况下,可以省略此属性。
在你的情况下,它应该是这样的
@ManyToOne
@JoinColumn(name="Table2_id")
private Table2 Table2_id ;
@ManyToOne
@JoinColumn(name="Table2_Table1_username")
private Table2 Table2_Table1_username;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.