随后进入判定
return this.invokeSaveLifecycle(entity, persister, source) ? id : this.performSaveOrReplicate(entity, key, persister, useIdentityColumn, anything, source, requiresImmediateIdAccess);
未通过persister.implementsLifecycle()
判定 返回了false
protected boolean invokeSaveLifecycle(Object entity, EntityPersister persister, EventSource source) {
if (persister.implementsLifecycle()) {
LOG.debug("Calling onSave()");
if (((Lifecycle)entity).onSave(source)) {
LOG.debug("Insertion vetoed by onSave()");
return true;
return false;
public boolean implementsLifecycle() {
return this.getEntityTuplizer().isLifecycleImplementor();
自定义策略
* 当新数据指定了自定义id时 使用自定义id
* 参考:
* https://stackoverflow.com/questions/11667929/jpa-override-auto-generated-id
* https://jianshu.com/p/db5f10b546df
public class CustomUUIDGenerator extends UUIDGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
try {
Serializable id = session.getEntityPersister(null, object).getClassMetadata().getIdentifier(object, session);
if (id != null)
return id;
} catch (Exception e) {
return super.generate(session, object);
return super.generate(session, object);
@GeneratedValue(generator = "custom-uuid-generator")
@GenericGenerator(name = "custom-uuid-generator", strategy = "com.ect.core.entity.CustomUUIDGenerator")
@Column(name = "UUID", nullable = false, columnDefinition = "char(32)")
private String id;
参考链接:
stackoverflow.com/questions/3…
stackoverflow.com/questions/1…
jianshu.com/p/db5f10b54…