Я новичок в 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
.
ПРОБНЫЕ РЕШЕНИЯ
Я попытался получить все записи от имени companyId
, но в этом случае данные не отображаются в таблице company-driver
.
Я пытался использовать аннотации @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);
Пожалуйста, помогите мне преодолеть эту проблему