【发布时间】:2011-11-20 10:20:45
【问题描述】:
我需要存储一个customer 当前选择的payment 信息,以便可以在处理购买时使用此信息。客户可以拥有许多信用卡。所以我将其建模为OneToMany 关系。我怀疑将当前选择的付款信息存储为不同的字段(如下所示)。并排有一个 Set<Payment> 和 Payment 字段,看起来不太正确。
有没有更好的方法来做到这一点?可以使用一些标志来标记这是当前选择的卡片信息
@Entity
class Customer{
...
@OneToMany( cascade=CascadeType.ALL,orphanRemoval=true)
Set<Payment> payments;
Payment currentlySelectedPayment;//?
}
@Entity
@Table(uniqueConstraints=@UniqueConstraint(columnNames={"cardType","cardNumber"}))
public class Payment{
...
String cardType;
String cardNumber;
String nameOnCard;
...
Date dateOfExpiry;//day,month,year of expiry
}
我将业务逻辑实现为
void addNewCard(...){
Payment payment = get_from_db_or_create_new_payment(...);
if(!customer.getPayments().contains(payment) ){
customer.getPayments().add(payment);
}
...
}
void setCurrentlySelectedPaymentForCustomer(Long paymentId,..){
Payment payment = getPaymentFromDB(paymentId);
if(!customer.getCurrentlySelectedPayment().equals(payment)){
customer.setCurrentlySelectedPayment(payment);
}
...
}
【问题讨论】: