【问题标题】:ORA-01400: Error while inserting Foreign Key using HibernateORA-01400: 使用 Hibernate 插入外键时出错
【发布时间】:2015-08-05 08:16:59
【问题描述】:

我有两个表 AB,外键从 B 到称为 FK_A。我对FK_A 有一个not null 约束。

我有以下两个类:

@Entity
@Table(name = "A")
public class A {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "ID")
    private long id;

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name = "FK_A", nullable = true)
    private Set<B> b; 

    //getters setters etc.
}


@Entity
@Table(name = "B")
public class B {
    //attributes, getters setters etc.
}

读取工作正常,但是当我尝试将 A 写入数据库时​​,我得到:ORA-01400: cannot insert NULL into ("SCHEMA"."B"."FK_A")

我试图插入实体的代码如下所示:

@PersistenceContext(unitName = "ab")
private EntityManager em;

A a = new A();
B b = new B();

Set<B> bList = new HashSet();
bList.add(b);
a.setB(bList);

em.persist(a);

现在,如果我是正确的,不应该根据它自动生成的id 在表B 中自动填充FK_A。如果没有,我该如何设置它?

【问题讨论】:

  • 如何将Set&lt;B&gt; b 设置为List&lt;B&gt; bList
  • 在我的代码内部进行了转换。将在此处进行编辑以更正
  • ;)。也许B 来源可能对我们有用。
  • @SurajMenon 您最初是如何创建表格的?我的意思是,在 A 类中,b 变量使用属性 nullable=true 进行注释,这意味着该列应该接受空值。

标签: java oracle hibernate


【解决方案1】:

看看 mappedBy OneToMany.mappedBy()。 JavaDoc:

The field that owns the relationship. Required unless the relationship is unidirectional.

它是 Hibernate 的关键字“inverse”的同义词。

另见this question

此外,作为一个变体,您的 B 类可能具有使用 @ManyToOne(optional = false) 注释声明的 A 类的属性。

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 2013-02-21
    • 2017-09-01
    • 2018-08-21
    • 1970-01-01
    相关资源
    最近更新 更多