JPA持有一个有或没有set id的新实体

时间:2017-09-15 19:44:09

标签: 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;
}

}

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

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);
}

}

我的目标是持久化具有使用该ID的id的实体和不具有生成ID的id的实体。这可能吗?

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

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

  

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

0 个答案:

没有答案