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

Hibernate异常:已分离的实体已传递到persist[重复]

闻人鸿飞
2023-03-14

我正在尝试使用Hibernate EntityManager持久化方法将person pojo插入mysql db,

entityManagerTransactionService.getEntityManager().persist(TemplateObject);

得到这个异常,

 javax.persistence.PersistenceException:
 org.hibernate.PersistentObjectException: detached entity passed to
 persist: com.esupu.base.model.pojo.common.TitleType    at
 org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)....

还有更多..

 Caused by: org.hibernate.PersistentObjectException: detached entity
 passed to persist: com.esupu.base.model.pojo.common.TitleType  at
 org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
    at
 org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:843)

My person.java类是,

@Entity
public class Person extends TemplateObject {

    @OneToOne(cascade = { CascadeType.MERGE, CascadeType.PERSIST,CascadeType.REFRESH })
        private TitleType titleType;
        private String middle;
        private String last;
        @OneToOne(cascade = { CascadeType.ALL })
        private Address address;
        private Date birthdate;
        private String email;
        private String telephone;
        private String fax;
        @OneToOne(cascade = { CascadeType.ALL })
        private Location location;
        @OneToOne(cascade = { CascadeType.ALL })
        private Country country;

然后使用pojo的getter setter方法。

@Entity
public class TitleType extends TemplateObject {

    /**
     * 
     */
    private static final long serialVersionUID = 3104954552111621034L;

    private TitleType(int id, String name) {
        setId(id);
        setName(name);
    }

    public static final TitleType MR = new TitleType(1, "Mr");
    public static final TitleType MISS = new TitleType(2, "Miss");
    public static final TitleType MRS = new TitleType(3, "Mrs");
    public static final TitleType MS = new TitleType(4, "Ms");
    public static final TitleType DOCTOR = new TitleType(5, "Doctor");
    public static final TitleType PROFESSOR = new TitleType(6, "Professor");
    public static final TitleType SIR = new TitleType(7, "Sir");
    public static final TitleType MADAM = new TitleType(8, "Madam");

}
person.setTitleType(TitleType.MR);

是否不可能将公共静态final类型定义的类传递给Hibernate?还是我做错了什么?

提前致谢

共有1个答案

乜昆
2023-03-14

您试图保持的对象包括不应具有id值的titletype。否则,Hibernate将检查该对象在会话上下文中是持久的还是分离的。如果您不想像这样持久化对象的某些字段,您可以在持久化实体时使用@transient注释将这些字段从字段映射中排除。这不利于在DAO或实体中硬编码ID,因为这些值可能由某些生成器生成,但如果您用这些常量手动更新数据库,您至少可以在代码中将这些ID定义为常量,并在初始化瞬态或持久实例之前按ID从会话加载对象。

 类似资料:
  • 我有两个模型,一个用于存储用户详细信息,使用该Id,我试图将用户位置保存在另一个表中,该表使用用户的相同Id作为主键。 为什么我会出现这个错误?坚持是什么意思?我正在使用MySQL数据库(&I)

  • 当试图在web应用程序上创建课程实体实例时,我们遇到以下错误。这是一个JHipster应用程序完整的错误日志,下面是,但主要错误是 更新的代码:

  • 问题内容: 我正在尝试使用Hibernate EntityManagerpersist方法将个人pojo插入mysql db, 得到这个例外 还有更多.. 我的Person.java类是, 然后是pojo的getter setter方法。 引发TitleType类的错误是“公共静态最终”标题类型定义提供程序, 我正在为人员设置标题类型类, 不可能将公共静态最终类型定义的类传递给Hibernate?

  • JPA和Hibernate的新手,所以请耐心等待,因为我试图绘制一整张图片。所以我有两个具有双向关系的Java对象。员工类是拥有类,部门类是关系的反面。一个部门可以有许多员工,一个员工只能有一个部门。我分配了employee_id作为员工实体的主键,department_id作为部门实体的主键。我还想在员工类中使用department_id作为外键。 员工类 部门类 我用来生成两个对象并将它们保存

  • 我是Hibernate的新手,我需要帮助。 我有一个名为Kasa的表,它有3个属性-id、address和account\u id。在我的表中有12行。我想使用Hibernate对此进行映射,并使用Java添加新的映射,所以我这样做了: 我也有能手和二传手,但不需要复制。 现在我想在我的数据库中添加新行,如下所示: 我得到这样的错误:javax.persistence.PeristenceExce

  • 我得到了“分离的实体传递到持久”,但我不明白,该对象如何能够处于分离状态。 这里首先是一些上下文。 每个用户和角色有两个: 实体--除了名称之外--有几个不应与此问题相关的字段,外字段角色来自其基类: 在应用程序启动时,我希望确保此ApplicationRunner中存在管理员用户: 应用程序在启动时抛出异常并关闭: 我在这里的理解是,在从存储库中检索到之后就处于分离状态。 为何超脱?我假设方法上