当前位置: 首页 > 知识库问答 >
问题:

JPA级联持续多对一

翁和正
2023-03-14

我有两个JPA实体(账户和个人),具有双向关系:

@Entity
@Table(name = "ACCOUNTS")
@DataCache(enabled = false)
public class Account
{
    ....
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "ID_OWNER", nullable = false)
    private Person owner;
    ...
}

@Entity
@Table(name = "OWNERS")
@DataCache(enabled = false)
public class Person {
    ...
    @Column(name = "HAS_ACCOUNTS", nullable = false, columnDefinition = "CHAR(1)")
    private char hasAccounts;

    @OneToMany(mappedBy = "owner")
    private Set<Accpunt> comments = new LinkedHashSet<Account>(3);
    ...
}

当我持久化一个人时,我不想持久化所有帐户,但当我持久一个帐户时,我想更新Person属性hasAccounts,因此我还需要更新这个人。

我做了以下步骤:

  • 创建人员
  • 坚持该人
  • 创建帐户
  • 修改所有者(以前创建的
  • 持久帐户(我希望它会自动合并该人)
Person p = new Person();
em.persist(p);
Account a = new Account();
a.setOwner(p);
p.setHasAccounts('Y');
em.persist(a);

我得到了这个例外:

   javax.ejb.EJBTransactionRolledbackException: org.hibernate.PersistentObjectException: detached entity passed to persist: Person

(我用JPA 1.0配合Hibernate)。

共有1个答案

呼延鸿畅
2023-03-14

尝试以下操作:

Person p = new Person();
Account a = new Account();

p.getComments().add(a);
p.setHasAccounts('Y');

em.persist(p);
 类似资料:
  • 问题内容: 我正在使用JPA 2.0并hibernate。我有一个用户类和一个组类,如下所示: 然后,我创建一个用户和组,然后将该用户分配给该组。 我要拥有的是删除组时(当然),该组将被删除,并且该组具有的所有用户-组关系将从USER_GROUP连接表中自动删除,但用户本身不会从USER表。 使用上面的代码,当我删除组时,只有GROUP表中的行将被删除,并且用户在USER_GROUP连接表中仍然具

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

  • 使用Spring Boot 1.4.0和MySql 5.7 我有两个table并且它是单向的@manytomany,但是在角色的父端,我想删除权限hibernate会自动删除它自己和link-table记录: > 权限

  • 谢谢 ----更新----

  • 对于我的任务,我需要使用JPA创建多对多的关系,但是连接表是手动指定的,并带有额外的列。数据结构如下所示: 图书(id、名称、已出版、流派、评级) 作者(身份证、姓名、性别、出生) 图书-作者(id,book-id,author-id) 我创建了这样的实体: 作者: 书: AuthorBook表: 例如,当我删除ID=2的book,它将删除ID=1的author。有没有什么方法可以在不删除已绑定作