Oracle(10g)データベースのテーブルに日付フィールドがありTemporalType.TIMESTAMP
、Hibernateでマップされています。
@Column(name = "DISCOUNT_START_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date discountStartDate;
//Setter and getter.
日付を取得し、次のように表示します (これらは既にデータベースに挿入されています)。
2012-08-29 01:53:10.0
2012-08-20 02:32:22.0
2012-08-01 14:00:21.0
2012-08-20 13:58:01.0
2012-08-30 04:14:13.0
2012-09-10 16:13:45.0
JSTLのように表示しようとすると、
<fmt:formatDate pattern="dd-MMM-yyyy hh:mm:ss" value="${row.discountStartDate}"/>
例外をスローし、
javax.el.ELException: タイプ クラス java.lang.String の 2012-08-29 01:53:10.0 をクラス java.util.Date に変換できません
に変更しようとしTemporalType.TIMESTAMP
ましTemporalType.DATE
たが、うまくいきませんでした。
以前は、XML マッピング ファイル (xxx.hbm.xml) のように動作していました。
<property name="discountStartDate" type="date">
<column length="7" name="DISCOUNT_START_DATE"/>
</property>
しかし、注釈では失敗しました。この形式を適用しdd-MMM-yyyy hh:mm:ss
て、JSTL を使用して JSP でこれらの日付を表示するにはどうすればよいですか?
編集:
以下は、Oracle のテーブルにDiscount
マッピングされるエンティティ クラスです(とメソッドは省略されています)。DSCOUNT
equals()
toString()
@Entity
@Table(name = "DISCOUNT", catalog = "", schema = "WAGAFASHIONDB")
public class Discount implements java.io.Serializable
{
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "DISCOUNT_ID", nullable = false, precision = 35, scale = 0)
@SequenceGenerator(name = "discountIdSequence", sequenceName = "DISCOUNT_SEQ", allocationSize=1, initialValue=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "discountIdSequence")
private Long discountId;
@Column(name = "DISCOUNT_CODE", length = 100)
private String discountCode;
@Column(name = "DISCOUNT_PER", precision = 35, scale = 2)
private double discountPer;
@Column(name = "DISCOUNT_START_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date discountStartDate;
@Column(name = "DISCOUNT_END_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date discountEndDate;
@OneToMany(mappedBy = "discountId", fetch = FetchType.LAZY)
private Set<OrderTable> orderTableSet;
public Discount() {
}
public Discount(Long discountId) {
this.discountId = discountId;
}
public Long getDiscountId() {
return discountId;
}
public void setDiscountId(Long discountId) {
this.discountId = discountId;
}
public String getDiscountCode() {
return discountCode;
}
public void setDiscountCode(String discountCode) {
this.discountCode = discountCode;
}
public double getDiscountPer() {
return discountPer;
}
public void setDiscountPer(double discountPer) {
this.discountPer = discountPer;
}
public Date getDiscountStartDate() {
return discountStartDate;
}
public void setDiscountStartDate(Date discountStartDate) {
this.discountStartDate = discountStartDate;
}
public Date getDiscountEndDate() {
return discountEndDate;
}
public void setDiscountEndDate(Date discountEndDate) {
this.discountEndDate = discountEndDate;
}
public Set<OrderTable> getOrderTableSet() {
return orderTableSet;
}
public void setOrderTableSet(Set<OrderTable> orderTableSet) {
this.orderTableSet = orderTableSet;
}
}
JSP では、次のループを使用してデータを表示します (コードの複雑さを軽減します)。
<c:forEach var="row" items="${list}" varStatus="loop">
<fmt:formatDate pattern="dd-MMM-yyyy hh:mm:ss" value="${row.discountStartDate}"/>
</c:forEach>
そしてSpring DAOでは、前のループで繰り返されるリストは次のように単純に取得されます。
@SuppressWarnings("unchecked")
public List<Discount>getList(int currentPage, int rowsPerPage)
{
List<Discount> list = sessionFactory.getCurrentSession()
.createQuery("from Discount order by discountId desc")
.setFirstResult(currentPage)
.setMaxResults(rowsPerPage).list();
for(Discount d:list)
{
System.out.println(d.getDiscountStartDate()+" : "+d.getDiscountEndDate());
}
return list;
}
前のループは、デモンストレーションのためだけのものです。次のようにテーブルの日付が表示されます。
2012-08-29 01:53:10.0 : 2012-08-31 01:53:16.0
2012-08-20 02:32:22.0 : 2012-08-24 02:34:36.0
2012-08-01 14:00:21.0 : 2012-08-31 14:01:30.0
2012-08-20 13:58:01.0 : 2012-08-21 13:58:20.0
2012-08-30 04:14:13.0 : 2012-11-23 16:21:57.0
2012-09-10 16:13:45.0 : 2012-10-26 16:13:39.0
2012-08-22 16:06:23.0 : 2012-08-15 16:06:17.0
2012-08-22 10:35:04.0 : 2012-08-17 10:34:56.0
2012-08-17 10:35:29.0 : 2012-08-10 10:35:35.0
2012-10-08 10:35:56.0 : 2013-03-08 10:35:49.0