mappedby和joincolumn问题

dly7yett  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(287)

我有一个老的基于ant的项目,它使用spring和hibernate(我们手动添加依赖jar来构建路径)。
作为更改的一部分,我们必须升级hibernate版本(从3到4)(还添加了一些新jar)在这个版本升级之后,我们面临的问题很少是由于Map引起的。
在少数实体类中,我们对同一字段有两个注解:

@OneToMany(mappedBy="xxxx", cascade = PERSIST, fetch=FetchType.EAGER)
@JoinColumn(name="xxx", referencedColumnName="xxxxx")

但是在版本升级之后,我们不能同时使用mappedby和joincolumn。在某些情况下,我们尝试删除mappedby,在某些情况下,我们尝试删除joincolumn。它在某些情况下有效,但在整个应用程序中不起作用。有什么方法可以在hibernate4中保留这个Map/关系吗。
这是在多个功能上造成麻烦的主要问题。

ef1yzkbh

ef1yzkbh1#

如jpa规范所述(见第2.9节实体关系):
以下规则适用于双向关系:
双向关系的反向端必须使用 mappedBy 元素 OneToOne , OneToMany ,或 ManyToMany 注解。这个 mappedBy 元素指定实体中作为关系所有者的属性或字段。
一对多/多对一双向关系的多方必须是拥有方,因此 mappedBy 无法在上指定元素 ManyToOne 注解。
对于一对一的双向关系,拥有方对应于包含相应外键的一方。
对于多对多双向关系,任何一方都可能是拥有方。
这个 @JoinColumn 注解可用于单向或双向的所有者侧 OneToOne , ManyToOne 与单向的联系 OneToMany .
双向的 @OneToMany ```
@Entity
@Table(name = "TBL_PARENT")
class Parent {

// We should not use @JoinColumn here, it should be used
// on the the owning side of this association
@OneToMany(mappedBy = "parent")
List children;
}

@Entity
@Table(name = "TBL_CHILD")
class Child {

@ManyToOne
@JoinColumn(name = "CH_PARENT_ID")
Parent parent;
}

单向的 `OneToMany` (在jpa 2.0中添加):

@Entity
@Table(name = "TBL_PARENT")
class Parent {

// We should not use mappedBy element of the @OneToMany annotation here.
// The name element of the @JoinColumn is referred to the
// TBL_CHILD.CH_PARENT_ID column
@OneToMany
@JoinColumn(name = "CH_PARENT_ID")
List children;
}

@Entity
@Table(name = "TBL_CHILD")
class Child {

// This part is absent as this is unidirectional OneToMany.
// @ManyToOne
// @JoinColumn(name = "CH_PARENT_ID")
// Parent parent;
}

相关问题