请问下Jmix有没有提供获取数据库当前时间的方法

请问下Jmix有没有提供获取数据库当前时间的方法

你好,

Jmix 没有提供基于DB的获取时间方法,你可以提供一个 io.jmix.core.TimeSource 类型的 bean 来覆盖框架默认实现。
参考:

public class DatabaseTimeSource implements TimeSource {

 @PersistenceContext
 EntityManager entityManager;
 @Override
 @Transactional
 public Date currentTimestamp() {
     ZonedDateTime zdt = now();
     Date date = Date.from(zdt.toInstant());
     return date;
 }

 @Override
 @Transactional
 public long currentTimeMillis() {
     return currentTimestamp().getTime();
 }

 @Override
 @Transactional
 public ZonedDateTime now() {
     LocalDateTime localDateTime = (LocalDateTime) entityManager.createNativeQuery("select sysdate() from dual ").getSingleResult();
     ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
     return zdt;
 }
}

你好,这个问题可以用Spring的 JdbcTemplate 实现:

@Component
public class MyDao {
    private JdbcTemplate jdbcTemplate;
    
    public MyDao(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
    
    public Date getCurrentTime() {
        // 根据数据库不同进行修改
        String sql = "SELECT NOW()";
        return jdbcTemplate.queryForObject(sql, Date.class);
    }
}

MySQL 和 Postgres 都有 NOW() 这个方法。如果你是其他类型的数据库,需要自己修改SQL。