gpt4 book ai didi

java - 尝试应用 AttributeConverter 时出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:23 27 4
gpt4 key购买 nike

我在 spring boot 1.2.1 RELEASE 中使用 JPA AttributeConverter 并且工作正常。但是升级到spring boot 1.3.0.RELEASE后出现如下错误

    Caused by: javax.persistence.PersistenceException: Error attempting to apply AttributeConverter
at org.hibernate.type.descriptor.converter.AttributeConverterSqlTypeDescriptorAdapter$1.bind(AttributeConverterSqlTypeDescriptorAdapter.java:103)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:286)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:281)
at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:56)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2843)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3248)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3183)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3525)
at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:159)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:465)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:351)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1258)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517)
... 81 more
Caused by: java.lang.NullPointerException
at rafito.spring.boot.domain.TimestampPersistenceConverter.convertToDatabaseColumn(TimestampPersistenceConverter.java:16)
at rafito.spring.boot.domain.TimestampPersistenceConverter.convertToDatabaseColumn(TimestampPersistenceConverter.java:10)
at org.hibernate.type.descriptor.converter.AttributeConverterSqlTypeDescriptorAdapter$1.bind(AttributeConverterSqlTypeDescriptorAdapter.java:97)

我目前没有在我的 POST JSON 中设置 serviceBeginTime 和 serviceEndTime。但是在我升级 spring boot 版本之前,这并没有给我一个空指针。

转换器类

@Converter
public class TimestampPersistenceConverter implements AttributeConverter<Long, Timestamp> {


@Override
public Timestamp convertToDatabaseColumn(Long aLong) {
return new Timestamp(aLong);
}

@Override
public Long convertToEntityAttribute(Timestamp timestamp) {
return timestamp.getTime();
}
}

实体

@Column(name = "service_begin_time")
@Convert(converter = TimestampPersistenceConverter.class)
Long serviceBeginTime;

@Column(name = "service_end_time")
@Convert(converter = TimestampPersistenceConverter.class)
Long serviceEndTime;

数据库字段

service_begin_time timestamp without time zone,
service_end_time timestamp without time zone,

最佳答案

添加了空检查,因为这是最简单的。

@Override
public Timestamp convertToDatabaseColumn(Long aLong) {
if (aLong == null)
return null;
return new Timestamp(aLong);
}

关于java - 尝试应用 AttributeConverter 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34171453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com