0
型号 的Postgres +休眠+ NativeQuery:乔达日期时间到Postgres的TIMSTAMP
package domain;
@Entity @lombok.Getter @lombok.Setter
public class Event implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Type(type="pg-uuid")
private UUID uuid;
@Column(columnDefinition = "TIMESTAMP", updatable = false)
@CreatedDate
@Temporal(TemporalType.TIMESTAMP)
@Type(type= "PersistentDateTime") // typedef in package-info.java
private DateTime createdAt; // Joda's DateTime
}
库
package repository;
@Repository
public interface EventRepository extends JpaRepository<Event, UUID> {
// Has to be native query
@Query(value = "SELECT * FROM events WHERE created_at >= :created_at ", nativeQuery = true)
List<Event> findCreatedSince(@Param(value = "created_at") DateTime createdAt);
}
当我打电话findCreatedSince(someDateTime)
它抛出PSQLException
有消息"cannot cast type bytea to timestamp without time zone"
。 (事情是当它是正常的JPQL时,没有抱怨,实际上数据可以使用标准JPA存储库方法存储和检索)。 为了记录在案,我得到了下面的日志(注VARBINARY
)调用方法时:
[main] TRACE BasicBinder – binding parameter [1] as [VARBINARY] - [1970-01-01T01:00:00.000+01:00]
对于临时分辨率更改的createdAt
类型java.util.Date
,但我想知道怎么用Joda的DateTime
类型。提前致谢。
也许你的JPA提供者不支持Jodatime类型的开箱即用?我使用的JPA提供程序(DataNucleus)确实存在,但Jodatime类型未包含在JPA规范中。 –
正如我在帖子中提到的,由于正常的JPQL调用工作得很好,我不认为这是问题所在。 – Rad
如果有东西将某个列映射为“bytea”,那么它不起作用。 Hibernate生成了你的模式?它将Jodatime字段设置为“bytea”?即序列化。 –