0

SQL Server 2008 で休止状態で時間を比較しようとしています。

次のコードは、このエラーを返します。The data types time and datetime are incompatible in the less than or equal to operator.

crit = session.createCriteria(ObdBlackoutHours.class);
Criterion start = Restrictions.le("blackoutStart", new Date());
        Criterion end = Restrictions.gt("blackoutEnd",new Date());
        List list = crit.add(Restrictions.conjunction().add(start).add(end))
                .list();
        if(list.isEmpty())
            return false;
        else 
            return true;

テーブルのデザインは次のとおりです。

CREATE TABLE [dbo].[obd_blackout_hours](
[id] [int] NOT NULL,
[blackout_end] [time](7) NOT NULL,
[blackout_start] [time](7) NOT NULL)

データベースに含まれているのは、比較できない10:17:37このようなものだけであることを理解しています。非常にうまく機能しているように見えるThu Nov 14 10:17:37 IST 2013同じコードをテストしました。mysqlしかしSQL Server 2008、問題を引き起こしています。私も通してみた

currentDate = new SimpleDateFormat("HH:mm:ss").parse(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));

new ObdBlackoutHours(1,new Date(),new Date()).getBlackoutStart()

Date() オブジェクトだけではありません。これも失敗します。時間を比較して結果を得るにはどうすればよいですか。

以下はエンティティクラスです

@Entity
@Table(name = "obd_blackout_hours", schema = "dbo", catalog = "IVR_Data")
public class ObdBlackoutHours implements java.io.Serializable {

private int id;
private Date blackoutStart;
private Date blackoutEnd;
private Set<Service> services = new HashSet<Service>(0);

public ObdBlackoutHours() {
}

public ObdBlackoutHours(int id, Date blackoutStart, Date blackoutEnd) {
    this.id = id;
    this.blackoutStart = blackoutStart;
    this.blackoutEnd = blackoutEnd;
}

public ObdBlackoutHours(int id, Date blackoutStart, Date blackoutEnd,
        Set<Service> services) {
    this.id = id;
    this.blackoutStart = blackoutStart;
    this.blackoutEnd = blackoutEnd;
    this.services = services;
}

@Id
@Column(name = "id", unique = true, nullable = false)
public int getId() {
    return this.id;
}

public void setId(int id) {
    this.id = id;
}

@Temporal(TemporalType.TIME)
@Column(name = "blackout_start", nullable = false, length = 16)
public Date getBlackoutStart() {
    return this.blackoutStart;
}

public void setBlackoutStart(Date blackoutStart) {
    this.blackoutStart = blackoutStart;
}

@Temporal(TemporalType.TIME)
@Column(name = "blackout_end", nullable = false, length = 16)
public Date getBlackoutEnd() {
    return this.blackoutEnd;
}

public void setBlackoutEnd(Date blackoutEnd) {
    this.blackoutEnd = blackoutEnd;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "obdBlackoutHours")
public Set<Service> getServices() {
    return this.services;
}

public void setServices(Set<Service> services) {
    this.services = services;
}

}
4

1 に答える 1

1

次のブログを参照してください:
http://blogs.msdn.com/b/jdbcteam/archive/2010/04/08/using-time-and-date-data-types-part-1-what-time-is- it.aspx
休止状態の接続 URL 文字列に以下を追加する必要があります
。それが true か false かはわかりません。ただ遊んでみてください。
sendTimeAsDateTime=false

于 2013-11-14T05:48:59.117 に答える