[英]How do you represent collections of Hibernate objects in a single POJO?
[英]How good practice and how is Transient Objects in POJO / Models in Hibernate Objects through “Program To Interface”?
我正在從事基本的金融/銀行項目。 存在具有不同上下文的“貨幣”,不僅貨幣類型文本,而且我還需要其他操作。
在DB中,我將金額保留為NUMBER字段,在Hibernate中為BigDecimal類型的對象。 假設Transfer
是一個映射到表的對象,該表具有兩個人之間的轉賬信息;
@Entity
class Transfer {
@Id @Column
private Long id;
@Column
private Person from; //mapped personId
@Column
private Person to; //mapped personId
@Column
private BigDecimal amount;
//... setters & getters
}
但實際上; 幾乎總是我需要用Money作為金額,並且需要特殊的toString()方法:asText(),不僅是BigDecimal對象,而且因為我確實需要這個:
Transfer t = dao.getMySpecialTransferObject();
System.out.println(t.money.asText());
但是我仍然直接需要金額,因為我需要對金額進行一些計算。 (我也需要其他實體中的Money類型對象)
現在我想我需要創建一個此類。
class Money {
private BigDecimal amount;
//... setters & getters
public String asText(){
String textToReturn = "The amount of this money is: " + amount.toString;
// ... and some locale information and manipulation on textToReturn
return textToReturn;
}
}
隨着復雜性的增長,設計模式會說“程序到接口”,那么我想我將把這筆錢作為接口和實現來使用;
interface Money{
public String asText();
}
class BasicMoney implement Money{
private BigDecimal amount;
//... setters & getters
public String asText(){
String textToReturn = "The amount of this money is: " + amount.toString();
// ... and some locale information and manipulation on textToReturn
return textToReturn;
}
所以我想用“ Money”類型的對象來編輯我的POJO“ Transfer”而不是數量。
@Entity
class Transfer {
@Id @Column
private Long id;
@Column
private Person from; //mapped personId
@Column
private Person to; //mapped personId
@Column
// Not anymore: private BigDecimal amount;
private Money money;
//... setters & getters
}
好了,現在是這個問題:
我的POJO“ Transfer”將具有相同的“ Money”類型對象,但數據庫關系如何? Money不是DB中的持久對象,因此我可以使用@Transient批注,但是我仍然需要Money和DB中“ amount”列之間的耦合/關系 。 我應該如何在POJO上保持這種關系?
注意; 我們正在使用util類(沒有接口或臨時對象)進行這種格式化等操作,但是我不確定這是否是最佳實踐,除非有更好的解決方案,否則我將不再開發util類。
保持您的字段為BigDecimal,只需添加帶有格式化/顯示您的金額的靜態函數的幫助器類即可。 在這種情況下,提取Money接口沒有任何意義,因為您只有“ toString”方法。 請記住KISS原則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.