当前位置: 首页 > 面试题库 >

JPA。级联合并时的Stackoverflow

阎烨
2023-03-14
问题内容

这是我的JPA结构:

电影(看级联类型):

@Entity
@Table(name = "movie")
public class Movie {

    @Id
    @Column(name = "movie_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    //@OneToMany(cascade = CascadeType.ALL, mappedBy = "primaryKey.movie") //stack overflow
    @OneToMany(mappedBy = "primaryKey.movie") //works fine
    private List<Rating> ratings;
    ....
}

评分:

@Entity
@Table(name = "rating")
@AssociationOverrides({@AssociationOverride(name = "primaryKey.movie", joinColumns = @JoinColumn(name = "movie_id")),
        @AssociationOverride(name = "primaryKey.user", joinColumns = @JoinColumn(name = "imdb_user_id"))})
public class Rating {
    @EmbeddedId
    private RatingId primaryKey = new RatingId();

    @Column(name = "rating_value")
    private Integer ratingValue;
    .....
}

RatingId:

@Embeddable
public class RatingId implements Serializable{
    @ManyToOne
    private Movie movie;

    @ManyToOne
    private User user;
}

当我致电时entityManager.merge(Moviemovie)CascadeType.ALL我得到了。如果删除级联,则合并调用不会引发错误。哪里可能有问题?

我认为这个问题与复合主键有关。在merge具有相同一对多关系但没有复合ID的另一个实体上执行时没有错误。


问题答案:

StackOverflow是由循环关系引起的。为了避免出现异常,我在多对多表中将键标记为@ManyToOne(fetch =FetchType.LAZY)



 类似资料:
  • 问题内容: 有没有一种方法可以将两个主键合并为一个,然后级联更新所有受影响的关系?这是场景: 客户(idCustomer int PK,公司varchar(50)等) CustomerContacts(idCustomerContact int PK,idCustomer int FK,名称varchar(50)等) CustomerNotes(idCustomerNote int PK,idCu

  • 我与以下实体类有一个双向的一对多关系: 当然,所有必需的级联选项都是在客户端设置的。但如果在引用现有产品订单时首次持久化新创建的客户端(如本场景所示),则它将不起作用: 已创建并持久化产品订单“%1”。工作正常。 已创建客户端“%2”,并将产品订单“%1”添加到其产品订单列表中。然后它被持久化。不起作用。 我尝试了几个apporach,但没有一个显示出预期的结果。请参阅下面的结果。我在这里阅读了所

  • 我有以下问题。我有3个实体,我使用的是一个单向实体: 一个小测试: 因此,看看上面的测试,如果我使用,在事务提交之后,确实会在持久性上下文中获得Entity1的两个实体,如果我将其更改为,则会在持久性上下文中获得Entity1的一个实体。有谁能解释一下为什么会发生这种情况或者指出一些文档吗?

  • 主要内容:JPA级联删除示例,输出结果级联移除用于指定如果父实体被移除,则其所有相关实体也将被移除。 以下语法用于执行级联删除操作 - JPA级联删除示例 在这个例子中,我们将创建两个相互关联的实体类,但要建立它们之间的依赖关系,我们将执行级联操作。 这个例子包含以下步骤 - 第1步: 在包下创建一个名为的实体类,其中包含属性:,,以及标记为级联规范的类型的对象。 文件: StudentEntity.java - 第2步: 在包下创建

  • 主要内容:级联枚举在JPA中,如果对实体应用了任何操作,那么它只会在该特定实体上执行。 这些操作不适用于与其相关的其他实体。 为了建立相关实体之间的依赖关系,JPA提供了定义级联操作的枚举类型。 这些级联操作可以用任何类型的映射来定义,即一对一,一对多,多对一,多对多。 级联枚举 以下是用于执行级联操作的枚举。 级联操作 描述 PERSIST 在这个级联操作中,如果父实体持久存在,则其所有相关实体也将被持久化。 M

  • Hy全部 我很难解决次年Spring的jpa问题。假设我有以下简单的数据模型(两个实体之间有单向关系) 和下面的管道来存储它们 下面的测试 最后一次测试(即insertEntity2WithExistingEntity1)失败,出现以下异常 组织。冬眠PersistentObjectException:传递给persist:com的分离实体。实例杰帕德莫。实体1 如果我将Entity2中的Casc