Вы не можете просто аннотировать сущность JPA и получить значение, возвращаемое функцией clock_timestamp()
Чтобы получить это значение в своем коде, вам нужно будет выполнить запрос
SELECT clock_timestamp();
Но вы можете использовать JPA-слушатели для достижения чего-то похожего:
public class TimestampEntityListener {
@PrePersist
public void setDefaultTime(BaseEntity entity) {
if(entity.getInsertTime() == null) {
entity.setInsertTime(new Timestamp((new Date()).getTime())):
}
}
}
@MappedSuperclass
@EntityListeners({TimestampEntityListener.class})
public abstract class BaseEntity {...}
Теперь, если вы действительно заинтересованы в том, чтобы БД контролировала время вставки, а не делегировала ваше приложение Сделав это, вы можете изменить приведенный выше код и подключить к нему EntityManager, чтобы вы могли выполнить этот выбор для БД и просто установить это значение напрямую.
Обновление: о том, как делегировать entityListener для запроса к базе данных
public class TimestampEntityListener {
@Autowired
EntityManager entityManager;
@PrePersist
public void setDefaultTime(BaseEntity entity) {
AutowireHelper.autowire(this, this.entityManager);
if(entity.getInsertTime() == null) {
Timestamp timestamp = (Timestamp)entityManager.createNativeQuery("select clock_timestamp()").getSingleResult();
entity.setInsertTime(timestamp):
}
}
}
Вы можете использовать этот класс для AutowireHelper и с указанным выше кодом он должен работать из коробки, пока ваши сущности будут расширять BaseEntity .