2016-03-06 41 views
0

我想要獲取在特定日期發生的所有事件,但我無法使其工作。在數據庫中查找日期對象

Event buffer_event = Event.find.where().like("date",new_date).findUnique(); 

這裏的new_date是一個正常的日期對象,日期爲03/03/2016 09:00。 但我嘗試運行此行時遇到錯誤。

java.util.Date cannot be converted to java.lang.String 

所以我用繩子試了一下:

Event buffer_event = Event.find.where().like("date", "03/03/2016 09:00").findUnique(); 

但我得到一個錯誤還有:

[PersistenceException: Query threw SQLException:Cannot parse "TIMESTAMP" constant "Thu Mar 03 09:00:00 CET 2016"; SQL statement: select t0.id c0, t0.name c1, t0.date c2, t0.user_id c3 from event t0 where t0.date like ? [22007-187] Bind values:[Thu Mar 03 09:00:00 CET 2016] Query was: select t0.id c0, t0.name c1, t0.date c2, t0.user_id c3 from event t0 where t0.date like ? ] 

所以我怎麼在這一天所有事件出來的我數據庫?

編輯:

@Entity 
public class Event extends Model { 

@Id 
public Long id; 

public String name; 

@Formats.DateTime(pattern="dd/MM/yyyy HH:mm") 
public Date date; 

@ManyToOne() 
public User user; 


public Event (String name, Date date) { 
    this.name = name; 
    this.date = date; 
} 

public String getName() { return name; } 

public void setName(String name) { this.name = name; } 

public Date getDate() { return date; } 

public void setDate(Date date) { this.date = date; } 

public static Model.Finder<Long,Event> find = new Model.Finder<Long,Event>(Long.class, Event.class); 
} 

這就是我的事件類。

# --- Rev:1,Ups - df1003e 

create table event (

id      bigint not null, 

name      varchar(255), 

date      timestamp, 

user_id     bigint, 

constraint pk_event primary key (id)) 

; 



create table user (

id      bigint not null, 

email      varchar(255), 

password     varchar(255), 

role      varchar(255), 

firstname     varchar(255), 

lastname     varchar(255), 

constraint pk_user primary key (id)) 

; 



create sequence event_seq; 



create sequence user_seq; 



alter table event add constraint fk_event_user_1 foreign key (user_id) references user (id) on delete restrict on update restrict; 

create index ix_event_user_1 on event (user_id); 
+0

發佈您的Event類和事件表的DDL。 – marcospereira

+0

我編輯了原文。感謝您的時間 – Ihara

回答

1

首先,你應該使用.eq代替.like的日期。對於查詢,您是否嘗試將DateTime對象傳遞給查詢?類似這樣的東西(未經測試):

 
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm"); 
DateTime dt = formatter.parseDateTime("03/03/2016 09:00"); 

Event buffer_event = Event.find.where().eq("date", dt).findUnique(); 
+1

就是這樣,我所要做的就是使用.eq。謝謝你的回答,我還是新玩框架。 – Ihara