JPA 持久化一个带有或不带有 set id 的新实体

Pet*_*rtu 5 java hibernate jpa

我正在使用 JPA 将实体持久化到我的数据库中。Id 列由 Persistable 类表示

@MappedSuperclass
public class Persistable {

@Id
@GeneratedValue(generator = "CustomGenerator")
@GenericGenerator(name="CustomGenerator", strategy = "parohia.imported.domain.UseExistingOrGenerateIdGenerator")
Long id;

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}
Run Code Online (Sandbox Code Playgroud)

}

我的自定义生成器是这样的:

public class UseExistingOrGenerateIdGenerator extends IdentityGenerator implements IdentifierGenerator {

@Override
public Serializable generate(SessionImplementor session, Object object)
        throws HibernateException {
    // TODO Auto-generated method stub
    Serializable id = session.getEntityPersister(null, object)
            .getClassMetadata().getIdentifier(object, session);
    return id != null ? id : super.generate(session, object);
}
Run Code Online (Sandbox Code Playgroud)

}

我的目标是使用该 id 保留具有 id 的实体,以及使用生成的 id 保留没有 id 的实体。这可能吗?

 EntityManager entityManager = databaseService.getEntityManager();
 entityManager.getTransaction().begin();
 entityManager.persist(new Persoana(5000L,"test","test"));
 entityManager.getTransaction().commit();
 entityManager.close();
Run Code Online (Sandbox Code Playgroud)

当持久化一个没有设置 id 的实体时,一切正常。但是当一个 id 被设置时,我得到

org.hibernate.PersistentObjectException:分离的实体传递给持久化