java - 将当前选择的付款信息存储在客户类别中

标签 java jpa payment

我需要存储 customer当前选择 payment info ,以便该信息可以用于处理购买。客户可以拥有许多信用卡。所以我将其建模为 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);
    }
...
}

最佳答案

我没有发现设计有任何问题。您需要将付款添加到付款集中。之后,您需要将所选付款分配给客户。

如果您使用的是一套,则不需要使用:

if(!customer.getPayments().contains(payment) ){

因为 Set 不允许添加重复的元素。

而且我看不出这样做的理由:

if(!customer.getCurrentlySelectedPayment().equals(payment)){

您可以只设置它,不需要评估当前SelectedPayment是否不相等。

我遇到过类似的情况,您需要首先将元素添加到父级,然后将这些元素之一分配给父级的属性之一。我解决这个问题的方法就是你的方法,而不是在子项中使用标志(true/false 属性)。

我认为你这样做的方式是正确的。我认为像本例中付款中名为 selectedPayment 的属性这样的标志不是该对象的适当属性。为什么?因为首先是客户的属性,而不是付款本身。其次,当您想要更改 selectedPayment 时,您需要从子对象获取 selectedPayment,删除标志并将标志分配给新的子对象,如果您只在父对象中创建属性,则可以避免许多步骤。

关于java - 将当前选择的付款信息存储在客户类别中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474517/

相关文章:

java - 斐波那契螺旋 - Robocode

java - Java 中 Gremlin 的 "mean"等效项(蓝图 2.6)

java - 在Activity.onCreate()中,为什么Intent.getExtras()有时会返回null?

android - Google Play Android Developer API 更改同一次购买的初始购买时间

django - 成员资格和事件 API?还是我应该自己做?

java - LinkageError - 违反加载程序约束 - 解析方法 "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()"时

java - 保存后如何检索实体关系?

java - 将 JPA 实体与特定于 Hibernate 的调整分开

java - JPA:多对多在哪里

php - 使用 Paypal 引用付款创建结算协议(protocol)问题