у меня был этот класс, который использовался для генерации идентификаторов, если они не были предоставлены: < /p>
Код: Выделить всё
import java.io.Serializable;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.IdentityGenerator;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.PropertyAccessorFactory;
public class UseIdOrGenerate extends IdentityGenerator {
// @Override
public Serializable generate(SessionImplementor session, Object obj) {
if (obj == null)
throw new HibernateException(new NullPointerException());
BeanWrapper forBeanPropertyAccess = PropertyAccessorFactory.forBeanPropertyAccess(obj);
if (!forBeanPropertyAccess.isReadableProperty("id") || forBeanPropertyAccess.getPropertyValue("id") == null) {
return super.generate(session, obj);
} else {
return (Serializable) forBeanPropertyAccess.getPropertyValue("id");
}
}
}
< /code>
Теперь в Hibernate 6 Это больше не работает.import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.PropertyAccessorFactory;
public class UseIdOrGenerate implements IdentifierGenerator {
@Override
public Object generate(SharedSessionContractImplementor session, Object entity) {
BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(entity);
Object currentId = beanWrapper.getPropertyValue("id");
if (currentId != null) {
return currentId;
} else {
return super.generate(session, entity)
}
}
}
Какой правильный способ сделать это в Hibernate 6?
Подробнее здесь: https://stackoverflow.com/questions/794 ... ibernate-6