我正在使用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:传递给的分离实体 坚持