与Spring数据JPA的多表关联

时间:2019-06-04 13:24:36

标签: spring-boot spring-data-jpa spring-batch

我正在尝试为我的客户报价需求创建数据库解决方案。我必须读取一个文件并将数据存储在大多数相互关联的多个表中。

我已经创建了实体类及其关联,如下所示。但是使用当前的方法,我看到了一个问题,即将优惠从优惠券扩展到奖励。如果我为奖励创建另一个实体,则需要更新我的CustomerEntity类,并与新实体添加另一个@OneToMany关联。

@Entity(name = "METADATA")
public class MetadataEntity {
    Metadata Id
    Offer description
     //Setters & Getters
}
@Entity(name = "CUSTOMER")
public class CustomerEntity {
    Customer Id
    Customer Name
    CouponEntity (OneToMany - Join column Coupon Code)
     //Setters & Getters
}
@Entity(name = "PROFILE")
public class ProfileEntity {
    Profile Id
    CustomerEntity (OneToOne - Join Column Customer Id)
     //Setters & Getters
}
@Entity(name = "COUPON")
public class CouponEntity {
    Coupon Code
    Amount
    Expiry
     //Setters & Getters
}
@Entity(name = "OFFER")
public class OfferEntity{
    Id
    MetadataEntity(ManyToOne - Join column Metadata Id)
    ProfileEntity(ManyToOne - Join column Profile Id)
    //Setters & Getters
}

从我的DAO类中,我正在使用与Offer关联的OfferRepository类。

@Repository
public interface OfferRepository extends JpaRepository<OfferEntity, String> {}
@Autowired
OfferRepository offerRepo;

public class DaoImpl {
    createOffer(OfferEntity offer){
        offerRepo.save(offer);
    }

    readOffers(){
       offersList = offerRepo.findAll();
       for-each offer:offersList {
           //access all customer information & offer information (could be a coupon or rewards)
           offer.getProfile().getCustomer().getCoupons();
       }
    }
}

我正在尝试确定一种解决方案,如果要扩展“优惠”,则不需要更新任何现有实体类。

1 个答案:

答案 0 :(得分:0)

我建议您为Coupon和Rewards创建一个基类。我们称它为Benefit。

然后可以将其用作Customer类中的关系。

然后,客户类可能有一种方法来获取优惠券或奖励,具体取决于您传递给该方法的类对象,例如:

T List<T> getBenefits(Class<T> type)