Многостоловая ассоциация с данными Spring JPA - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь создать решение для БД в соответствии с требованиями моего предложения клиента.Мне нужно прочитать файл и сохранить данные в нескольких таблицах, которые в основном связаны друг с другом.

Я создал классы сущностей и их ассоциации, как показано ниже.Но с текущим подходом я вижу проблему, расширяющую предложения от Купонов до Вознаграждений.Если я создаю другую сущность для вознаграждений, мне нужно обновить класс 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 я использую OfferRepository класс, связанный с Offer.

@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 голосов
/ 07 июня 2019

Я бы предложил вам создать базовый класс для Купонов и Наград.Давайте назовем его «Выгода».

Затем его можно использовать в качестве отношения в классе Customer.

Тогда класс клиента может иметь метод для получения купонов или вознаграждений в зависимости от объекта класса, который выперейти к этому методу, как:

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