2011-07-24 90 views
0

在此先感謝您的時間和幫助。看看其他帖子,但只有一些信息可用,所以如果有人給出了完整的圖片,非常感謝。使用java反射設置值

我:

public enum AddressType { 
HOME,WORK,BILLING,SHIPPING,OTHER 
} 

public class AddressDto implements java.io.Serializable { 

private String street; 
private String city; 
private String stateCode; 
private int zipcode; 
private String country; 
private AddressType addressType; 

public AddressDto() { 
} 

public String getStreet() { 
    return street; 
} 

public void setStreet(String street) { 
    this.street = street; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

public String getStateCode() { 
    return stateCode; 
} 

public void setStateCode(String stateCode) { 
    this.stateCode = stateCode; 
} 

public int getZipcode() { 
    return zipcode; 
} 

public void setZipcode(int zipcode) { 
    this.zipcode = zipcode; 
} 

public String getCountry() { 
    return country; 
} 

public void setCountry(String country) { 
    this.country = country; 
} 

public AddressType getAddressType() { 
    return addressType; 
} 

public void setAddressType(AddressType addressType) { 
    this.addressType = addressType; 
} 
} 

@Entity 
@Table(name = "ADDRESS") 
public class Address implements java.io.Serializable { 

private String street; 
private String city; 
private String stateCode; 
private int zipcode; 
private String country; 
private AddressType addressType; 

public Address() { 
} 

public String getStreet() { 
    return street; 
} 

public void setStreet(String street) { 
    this.street = street; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

public String getStateCode() { 
    return stateCode; 
} 

public void setStateCode(String stateCode) { 
    this.stateCode = stateCode; 
} 

public int getZipcode() { 
    return zipcode; 
} 

public void setZipcode(int zipcode) { 
    this.zipcode = zipcode; 
} 

public String getCountry() { 
    return country; 
} 

public void setCountry(String country) { 
    this.country = country; 
} 

public AddressType getAddressType() { 
    return addressType; 
} 

public void setAddressType(AddressType addressType) { 
    this.addressType = addressType; 
} 
} 

使用反射,我試圖擺脫DTO值和設定值的實體。爲何反思?考慮到我可以重新使用這個反射代碼來處理涉及DTO和實體的所有其他類似情況。

請大家指教一下這樣做的有效方法。

謝謝。

+2

不是答案,而是與您的問題相關 - 爲什麼您同時使用DTO和實體?您可以使用分離的實體充當DTO,因此可避免將值設置爲實體的問題,因爲它已在實體中可用。 –

+0

嗨維尼,謝謝你的好主意。理由我想使用DTO和實體。 1 - 具有鬆耦合黑白服務層(管理商務邏輯和實體)和servlet控制器。 2 - 我的理解是,我們第一次堅持實體時,不能使用獨立實體。 3 - 當獲取一個實體時,它可能會加載所有的值(例如:20個實例變量,要知道我們可以使用延遲加載來修復其中的一些實例變量)。如果我使用DTO,而不是發送完全加載的實體,我可以使用DTO的輕量級版本(例如:只有5個值) –

+0

老實說,點2是沒有意義的,因爲分離的實體只有在實體承諾。所以,如果你堅持一個實體,它是一個新的/暫時的實例,依靠JPA實體生命週期。就第1點和第3點而言,DTO只有在它們不是實體的複製品(在您的發佈代碼中不是這種情況)時才提供幫助。如果您要發送具有20個字段的DTO中的實體的5/20個字段,因爲您只是複製字段,所以沒有意義。更糟糕的是,向數據模型添加一個字段將需要兩個類而不是一個類的更改。 –

回答