【发布时间】:2015-01-30 18:38:00
【问题描述】:
背景:我使用 JPA (hibernate impl) + spring 我有两个表,第一个还可以,它有一个主键,甚至可以使用 java.Util.Date 字段。另一个在主键中有 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;
}
}
这个实体我卡了很长时间:
我今天几乎整天都在解决这个问题。 我有格式为(yyyy-mm-dd)的日期列的数据库。 我在项目中也有带有 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));
它找到数据。
问题是如何将 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);
【问题讨论】:
-
您能否提供
hotels表架构(即CREATE TABLE hotels...查询)? -
能否提供MySql表的描述?
-
可能是关于 java.util.Date。也许这篇文章对你有帮助stackoverflow.com/questions/2305973/…
-
请尝试使用 java.sql.Date 并让我知道它是否有帮助
-
将实体中的字段更改为 java.sql.Date 并将其添加到查询中,没有帮助:(我猜 Mysql 以另一种格式获取日期,例如:(dd-mm-yyyy)
标签: java mysql hibernate date jpa