Как сохранить DriverDetail без обновления CompanyDetail в спящем режиме - PullRequest
0 голосов
/ 10 марта 2019

Я новичок в hibernate, и в настоящее время я занимаюсь разработкой небольшого транспортного приложения, в котором я интегрирую инструмент ORM hibernate для сохранения данных, и теперь я застрял в месте, где у меня есть сопоставление, основанное на ассоциации типа один-к-одному и один-слишком много.У меня есть две сущности с именами CompanyDetails и DriverDetail.Согласно реальному сценарию, любая компания, предоставляющая транспортные услуги, имеет много drivers, и их подробности, в соответствии с этим, я пришел к выводу связи «один ко многим» между CompanyDetails и DriverDetail, то есть компания, имеющая список водителей,Теперь это создало три таблицы в базе данных, по одной для каждой сущности, а вторая представляет собой таблицу сопоставления сценариев i, e Company_detail, driver_detail и company-driver_detail

Пользователь с правами администратора зарегистрирует драйвер в компании. Предположим, что есть 10 компаний, и администратор хочет добавить драйверы, чтобы он мог регистрировать драйверы от имени любого идентификатора компании, мне нужно сопоставить идентификатор компании и идентификаторводителя в company-driver_detail таблице.Что я сделал, я использую свойство List<DriverDetail> driverList в CompanyDetail и использую CompanyDetail companyDetail в DriverDetail классе.

CompanyDetail

@Entity
@Table(name="company_detail")
//@DynamicUpdate
//@SelectBeforeUpdate
public class CompanyDetails {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="company_id")
    private long companyId;

@OneToMany(cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinTable(name = "COMPANY_DRIVER_DETAIL", joinColumns = @JoinColumn(name = "company_id"), inverseJoinColumns = @JoinColumn(name = "driver_id"))
    private List<DriverDetail> driverList;

//More properties
//Getters and Setters
}

DriverDetail

@Entity
public class DriverDetail {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="driver_id")
    private long id;

    private String name;

    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="company_id")
    private CompanyDetails companyDetail;
    //More properties
    //Getters and Setters
}

ПРОБЛЕМА

когда я спрашивал у пользователя информацию о драйвере, я также хочу company Id, поэтому соответствующая информация не только сохраняетсяв driver_detail, а также в company-driver таблице, но проблема в том, что когда я спросил входную информацию company_id и установил companyId в установщике CompanyDetail, то hibernate обновил все поля в таблице company_detail такжевся строка, соответствующая идентификатору, становится NULL.

ПРОБНЫЕ РЕШЕНИЯ

  1. Я попытался получить все записи от имени companyId, но в этом случае данные не отображаются в таблице company-driver.

  2. Я пытался использовать аннотации @DynamicUpdate и @SelectBeforeUpdate, но проблема не удалась.

Требование Я хочу сохранить информацию о драйвере в таблице драйверов и внутри таблицы company-driver_detail без потериинформация Company_detail

КЛАСС ГЛАВНОГО ТЕСТА

    CompanyDetailService cdService=new CompanyDetailService();
    CompanyDetails cd=new CompanyDetails();
    List<DriverDetail>ddList=new ArrayList<>();
    DriverDetail driver=new DriverDetail();
    DriverDetailService dds=new DriverDetailService();
    Scanner kb=new Scanner(System.in);

    System.out.println("Enter name:");
    String cname=kb.nextLine();
    driver.setName(cname);

    System.out.println("Enter Company Id");
    long companyId=kb.nextLong();
    cd.setCompanyId(companyId); //This line let hibernate to trigger update


    System.out.println("Enter License:");
    String license=kb.next();
    driver.setLicenseNo(license);

    System.out.println("Enter Contact");    
    String contact=kb.nextLine();
    driver.setContactNo(contact);

    cd.setDriverList(ddList);
    driver.setCompanyDetail(cd);
    dds.save(driver);

Company_detail Driver_detail Company_driver_detail

Пожалуйста, помогите мне преодолеть эту проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...