Hibernate + UserVersionType Java не вызывает семя /next, но вызывает replace()JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Hibernate + UserVersionType Java не вызывает семя /next, но вызывает replace()

Сообщение Anonymous »

Я пытаюсь реализовать UserVersionType для управления типом версии, у меня есть код ниже, и он не достигает начального/следующего метода.
Я проверил весь связанный импорт, добавил журналы, включил журналы гибернации, проверил версию гибернации
при вызове Repo.save() он вызывает метод replace из ManagedVersion, но dosent callseed или next.
Любые лиды приветствуются.
@Entity
@Getter
@Setter
@Log4j2
@Table(name = "tab1")
//Filter added to retrieve only records that have not been soft deleted.
@Where(clause="deleted = 'f'")
@FieldNameConstants
@JsonIdentityInfo(generator= ObjectIdGenerators.IntSequenceGenerator.class)
public class tab1 implements Persistable, Cloneable {

@Version
@Type( type = "com.ManagedVersion")
@Generated(GenerationTime.ALWAYS)
@Column(name = "version")
private Long version = 0L;

@Column(updatable = false, insertable = false, name = "version")
private Long externallyGeneratedVersion = 2L;

@PostLoad
private void postLoad() {
externallyGeneratedVersion = 3L;
}

}

это класс управляемой версии
public class ManagedVersion implements UserVersionType {
private static final String ENTITY_ENTRY_CONTEXT = "entityEntryContext";
private static final String HEAD = "head";
private static final String EXTERNALLY_GENERATED_VERSION = "externallyGeneratedVersion";
private static final String HIBERNATE_GET_ENTITY_INSTANCE = "$$_hibernate_getEntityInstance";

@Override
public Object seed(SharedSessionContractImplementor session) throws HibernateException {
log.error("action=seed state=info message=\"seed\"");
Long externallyGeneratedVersion = getExternallyGeneratedVersion(session);
if (externallyGeneratedVersion == null) {
return 0L;
} else {
return externallyGeneratedVersion;
}
//return 145L;
}

private Long getExternallyGeneratedVersion(SharedSessionContractImplementor session) throws HibernateException {
log.error("action=getExternallyGeneratedVersion state=info message=\"getExternallyGeneratedVersion\"");
Class managedEntityClass = ManagedEntity.class;
Class entityEntryContextClass = EntityEntryContext.class;
Class baseOutputEntityClass = BaseOutputEntity.class;

Object externallyGeneratedVersion = null;
try {
Field entityEntryContextField = getField(StatefulPersistenceContext.class, ENTITY_ENTRY_CONTEXT);
Field headField = getField(entityEntryContextClass, HEAD);
Field externallyGeneratedVersionField = getField(baseOutputEntityClass, EXTERNALLY_GENERATED_VERSION);
java.lang.reflect.Method managedEntityMethod = managedEntityClass.getMethod(HIBERNATE_GET_ENTITY_INSTANCE, null);
EntityEntryContext entityEntryContextObject = (EntityEntryContext) entityEntryContextField.get(session.getPersistenceContext());
ManagedEntity managedEntity = (ManagedEntity) headField.get(entityEntryContextObject);
Object outputEntity = managedEntityMethod.invoke(managedEntity);
externallyGeneratedVersion = externallyGeneratedVersionField.get(outputEntity);
} catch (Exception e) {
throw new RuntimeException("Error extracting externallyGeneratedVersion.", e);
}
return (Long) externallyGeneratedVersion;
}
private Field getField(Class classType, String fieldName) throws NoSuchFieldException {
Field field = classType.getDeclaredField(fieldName);
field.setAccessible(true);
return field;
}
@Override
public Object next(Object current, SharedSessionContractImplementor session) throws HibernateException{
log.error("action=next state=info message=\"next\"");
Long externallyGeneratedVersion = getExternallyGeneratedVersion(session);
if (externallyGeneratedVersion == null) {
return ((Long) current) + 7;
} else {
if (externallyGeneratedVersion 0 ? names[0] : "0");
if (rs.wasNull()) {
return 0L;
} else {
return value;
}
} catch (Exception e) {
throw new RuntimeException("Error getting value from ResultSet.", e);
}
}

@Override
public void nullSafeSet(PreparedStatement st, Object value, int index, SharedSessionContractImplementor session) throws HibernateException, SQLException {
Long longValue = 0L;
if (value instanceof String) {
longValue = Long.valueOf((String) value);
} else if (value instanceof Long) {
longValue = (Long) value;
}
try {
st.setLong(index, longValue);
} catch (Exception e) {
throw new RuntimeException("Error setting value on PreparedStatement.", e);
}
}

@Override
public Object deepCopy(Object value) throws HibernateException {
Long longValue = 0L;
if (value instanceof String) {
longValue = Long.valueOf((String) value);
} else if (value instanceof Long) {
longValue = (Long) value;
}
return longValue;
}

@Override
public boolean isMutable() {
return true;
}

@Override
public Serializable disassemble(Object value) throws HibernateException {
return (Serializable) deepCopy(value);
}

@Override
public Object assemble(Serializable cached, Object owner) throws HibernateException {
return deepCopy(cached);
}

@Override
public Object replace(Object original, Object target, Object owner) throws HibernateException {
log.error("action=replace state=info message=\"replace\"");
return deepCopy(original);
}
}


Подробнее здесь: https://stackoverflow.com/questions/786 ... ng-replace
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Каков наилучший способ зашифровать семя?
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Каков наилучший способ зашифровать семя?
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • TypeError: joypadspace.reset () получил неожиданный аргумент ключевого слова «семя», когда я запускаю следующий код, что
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Можно ли воспроизвести случайное семя, используемое для конечных кристаллических пиков до воспроизведения Minecraft 1.9?
    Anonymous » » в форуме JAVA
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Случайный: Что такое семя по умолчанию?
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»