Запрос с датой с использованием диспетчера объектовJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Запрос с датой с использованием диспетчера объектов

Сообщение Anonymous »

Справочная информация: я использую JPA (hibernate impl) + Spring
У меня есть две таблицы, первая в порядке, у нее один первичный ключ, и она работает даже с java.Util. Поля даты. Другой имеет 3 параметра в первичном ключе (я работаю с ним впервые):

PRIMARY KEY (`id_room`,`id_hotel`,`day`),


Полная схема:

CREATE TABLE `hotels` (
`id_room` int(11) NOT NULL DEFAULT '0',
`id_hotel` int(11) NOT NULL DEFAULT '0',
`day` date NOT NULL,
PRIMARY KEY (`id_room`,`id_hotel`,`day`),
KEY `id_hotel` (`id_hotel`,`day`),
KEY `day` (`day`),
KEY `day-hotel` (`day`,`id_hotel`),
KEY `hotel` (`id_hotel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


Итак, я добавил код в свою сущность:

@Entity @IdClass(HotelId.class)
@Table(name="hotels")
public class Hotels implements Serializable {
private static final Long serialVersionUID = 1L;

@Id
@Column(name="id_room")
private int roomId;
@Id
@Column(name="id_hotel")
private int hotelId;
@Id
@Temporal(TemporalType.DATE)
private Date day;
....


HotelId.class

public class HotelId implements Serializable {
private int roomId;
private int hotelId;
private Date day;

public HotelId() {
}

public HotelId(int roomId, int hotelId, Date day) {
this.roomId = roomId;
this.hotelId = hotelId;
this.day = day;
}

public int getRoomId() {
return roomId;
}

public int getHotelId() {
return hotelId;
}

public Date getDay() {
return day;
}
}


С этой сущностью я застрял надолго:

Я потратил сегодня почти весь день на эту задачу.
У меня есть база данных со столбцом даты в формате (гггг-мм-дд).
У меня также есть класс сущности в проекте с полем даты java.util.Date.
Теперь я пытаюсь сделайте выбор:

TypedQuery query = em.createQuery("Select h FROM Hotels h where h.roomId=:roomId and h.hotelId=:hotelId and h.day=:day", Hotels.class);
query.setParameter("roomId", roomId);
query.setParameter("hotelId", hotelId);
query.setParameter("day", date);


Он говорит, что данных нет

Теперь я меняю поле даты с java.util.Date на String и измените мой запрос:

TypedQuery query = em.createQuery("Select h FROM Hotels h where h.roomId=:roomId and h.hotelId=:hotelId and h.day=:day", Hotels.class);
query.setParameter("roomId", roomId);
query.setParameter("hotelId", hotelId);
query.setParameter("day", new SimpleDateFormat("yyyy-mm-dd").format(date));


Он находит данные.

Вопрос в том, как отправить дату (java.util.Date) в MySql DB и получить обратно информацию?

Обновление:

Это тоже не работает

@Entity
@Table(name="hotels")
public class Hotels implements Serializable {
private static final Long serialVersionUID = 1L;

@Id
private int id;
@Column(name="id_room")
private int roomId;

@Column(name="id_hotel")
private int hotelId;

private java.sql.Date day;
....
}


Запрос:

java.sql.Date sqlDate = new java.sql.Date(day.getTime());
TypedQuery query = em.createQuery("Select h FROM Hotels h where h.roomId=:roomId and h.hotelId=:hotelId and h.day=:day", Hotels.class);
query.setParameter("roomId", roomId);
query.setParameter("hotelId", hotelId);
query.setParameter("day", sqlDate);


Подробнее здесь: https://stackoverflow.com/questions/272 ... ty-manager
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»