2011-02-22 42 views
2

我有一個包含多個字段的類,並且都按屬性註釋。不過,對於其中一個字段,我想向用戶呈現一個雙精度數據庫和一個Date。如何覆蓋單個字段上的AccessType

我已經嘗試過任意數量的組合,但hbm2ddl(因此,休眠)繼續處理居住屬性作爲時間戳。我應該如何實現這一點,如果不是通過類似於我下面的註釋(這是所討論的類的簡化版本)?

我會考慮將所有註釋移動到字段中,但需要它的類位於繼承層次結構的頂部,涉及另外25個類和許多註釋。移動所有註釋需要一天的更多時間,而這似乎是處理這一問題的一種不合理的方式。

@Entity 
@AccessType("property") 
public class Test { 

    private long id; 
    private Double dwell; 

    @Id 
    @Column(name = "ID", nullable = false) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @NotNull 
    public long getId() { 
     return id; 
    } 

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

    @AccessType("field") 
    @Column(name = "DWELL_ID", precision = 10, scale = 3) 
    public Date getDwell() { 
     return new Date(); 
    } 

    public void setDwell(Double dwell) { 
     this.dwell = dwell; 
    } 

} 

回答

3

這看起來有點奇怪。我不確定更改訪問類型是否適合您。

你打破了javabeans的慣例,這是有風險的。不要這樣做 - 讓getter和setter成爲純粹的getter和setter,不需要像構造對象那樣隱藏額外的東西。

我只想寫另一種方法 - getDwellAsDate()並在那裏做轉換。你也可以定義一個自定義休眠模式Type來處理它(但它不值得)

+0

我實際上並沒有想到bean標準。聽起來最好的方法是使用替代訪問器。謝謝。 – Bret 2011-02-22 18:16:26