我刚刚注意到,Hibernate根据名称(可能是column或带注释的类)自动假定查询参数的数据类型。我试图将unix时间戳存储在MySQL数据库的BIGINT列中。当名称在数据库和我的(JPA)注释类中为timestamp时,Hibernate自动假定它是一个时态值,因此当我试图在查询中为该列绑定一个长值时,我会得到一个异常,因为Hibernate需要java.util.Date。当我在数据库和类中将此列重命名为“foobar”时,一切都按预期进行。我怎样才能阻止Hibernate做这样愚蠢的假设呢?
编辑:
CREATE TABLE candle
(
`open` decimal(25,15) NOT NULL,
`high` decimal(25,15) NOT NULL,
`low` decimal(25,15) NOT NULL,
`close` decimal(25,15) NOT NULL,
`volume` decimal(15,2) NOT NULL,
`symbol` varchar(255) NOT NULL,
`exchange` varchar(255) NOT NULL,
`timestamp` bigint NOT NULL,
`width` bigint NOT NULL,
PRIMARY KEY(`symbol`, `exchange`, `timestamp`, `width`),
KEY idx_symbol (`symbol`),
KEY idx_exchange (`exchange`),
KEY idx_timestamp (`timestamp`),
KEY idx_width (`width`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
JPA类:
@Entity(name="candle")
public class JpaCandle {
@EmbeddedId
private Key id;
@Column
private BigDecimal open;
@Column
private BigDecimal high;
@Column
private BigDecimal low;
@Column
private BigDecimal close;
@Column
private BigDecimal volume;
public Key getId() {
return id;
}
@Embeddable
public static class Key implements Serializable {
@Column
private String symbol;
@Column
private String exchange;
@Column
private long timestamp;
@Column
private long width;
}
}
查询:
TypedQuery<JpaCandle> q = em.createQuery("FROM candle WHERE symbol = :symbol AND width = :width AND timestamp >= :from AND timestamp <= :until ORDER BY timestamp ASC", JpaCandle.class);
q.setParameter("from", from.toEpochMilli());
q.setParameter("until", until.toEpochMilli());
q.setParameter("symbol", symbol);
q.setParameter("width", width.getSeconds());
List<JpaCandle> jpaCandles = q.getResultList();
timestamp
是MySQL中的列类型。最好不要对列使用这样的名称。也许,MySQL会返回date
这样的值类型。
问题内容: 我在HQL语句中绑定了命名参数,但只是没有被填充。 它输出类似这样的内容,这意味着未设置参数(coln,colv)并返回0条记录。 感谢您提供有关如何在HQL语句中绑定列名称的任何帮助。谢谢。马赫迪。 问题答案: 您不能将列名称绑定为参数。仅一列值。在绑定参数值和执行查询之前,在计算执行计划时必须知道该名称。如果您确实希望拥有这样的动态查询,请使用Criteria API或其他动态创建
考虑以下代码: 在到达返回时转换为。不同于,我想保留这种区别。我也更喜欢将保留为类型,因为仅具有字符串的含义,并且接口在其他地方使用。 < li >当< code>$null被传递时,如何使< code>$x作为< code>$null出现? < li >有没有其他方法可以让我知道< code>$x是从< code>f内部< code>$null而不是< code>[string]::Empty传
我有Java接口类。 我有另一个spec builder方法: 以上规范可用于创建客户端: 可用于调用下游客户端获取数据: 我创建了以下客户端规范静态映射:“ContentType”->DownstreamClientSpec 现在我有了一个处理程序方法: 除了contentType的switch语句和特定的客户端创建逻辑之外,我如何基于contentType获得客户端?使用Guice动态绑定特定
我正在尝试使用mySql全文索引“匹配”语法进行查询。 我将Spring Boot版本从1.5.4.RELEASE更改为2.0.0m7,以使用spring data jpa版本2.0.2.Releases,因为在早期的spring data jpa版本中,带有countQuery的本机查询不起作用。 我已经用这里和这里的解决方案解决了几个问题。 当前的问题是以下错误: 这是代码 如果我尝试将可分页
问题内容: 第二个表达式是类型擦除的结果吗? 我将如何定义Foo,以便可以使用Int参数化它,但仍然能够对其实例变量执行一些排序行为? 问题答案: 使用视图绑定。
4.6 ROS参数名称设置 在ROS中节点名称话题名称可能出现重名的情况,同理参数名称也可能重名。 当参数名称重名时,那么就会产生覆盖,如何避免这种情况? 关于参数重名的处理,没有重映射实现,为了尽量的避免参数重名,都是使用为参数名添加前缀的方式,实现类似于话题名称,有全局、相对、和私有三种类型之分。 全局(参数名称直接参考ROS系统,与节点命名空间平级) 相对(参数名称参考的是节点的命名空间,与