1

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.E​​LException: タイプ クラス 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マッピングされるエンティティ クラスです(とメソッドは省略されています)。DSCOUNTequals()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
4

0 に答える 0