繁体   English   中英

无法添加或更新子行:外键约束失败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误解了namereferencedColumnName

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM