В моем приложении Java Spring-boot я создаю лист Excel, используя шаблон JXLS с данными, предоставленными из моей базы данных SQL.
Я использую три таблицы из базы данных: клиент, лицензия, страховка. Лицензия и страховка имеют свой собственный внешний ключ, связанный с клиентской таблицей. Для доступа к информации о клиенте я использую
jx:each(items="clients" var="client" lastCell="G2")
для доступа к лицензии, я использую:
jx:each(items="client.licenseList", var="license",lastCell="G2")
и для доступа к страхованию я использую:
jx:each(items="client.insurances", var="insurance",lastCell="G2")
Клиент и лицензия работают нормально, но информация о страховке не получается. Я новичок в JXLS, может кто-нибудь сказать мне, почему он не может получить информацию? Должен ли быть столбец в таблице клиента для страховых данных, чтобы их можно было перенести в таблицу Excel? Это основное различие, которое я вижу для лицензий, но я не уверен, так ли это работает ...
Вот моя модель client.java.
@Entity
@DynamicUpdate
@Table(name="Client")
@EntityListeners(AuditingEntityListener.class)
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ClientId")
private Long id;
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
@DateTimeFormat(pattern = "MM/dd/yyyy HH:mm a")
private LocalDateTime lastModifiedDate;
private String status;
private String principleName;
private String legalName;
private String email;
private String phoneNumber;
private String address;
private String address2;
private String pastEmployment;
private String yearsExperience;
private String referencesNotes;
private String licenses;
private String currentAccessPartner;
private String assignedCRM;
private String executive;
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn(name = "client")
private List<Employee> employees= new ArrayList<>();
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn(name = "client")
private List<VendorService> vendorServices=new ArrayList<>();
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn(name = "client")
private List<MarketAccess> marketAccess=new ArrayList<>();
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn(name = "client")
private List<License> licenseList= new ArrayList<>();
public List<License> getLicenseList() {
return licenseList;
}
public void setLicenseList(List<License> licenseList) {
this.licenseList = licenseList;
}
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn(name = "client")
private List<Insurance> insurances=new ArrayList<>();
public List<Insurance> getInsurances() {
return insurances;
}
public void setInsurances(List<Insurance> insurances) {
this.insurances = insurances;
}
Код для контроллера:
@RequestMapping(value="/report/expirationReport")
public void expirationReport(HttpServletResponse response){
List<Client> clients=clientRepository.findAll();
try {
response.addHeader("Content-disposition", "attachment; filename=expirationReport.xlsx");
response.setContentType("application/vnd.ms-excel");
InputStream is= new ClassPathResource("static/reports/expirationReport.xlsx").getInputStream();
Context context= new Context();
context.putVar("clients", clients);
JxlsHelper.getInstance().processTemplate(is,response.getOutputStream(),context);
response.flushBuffer();
} catch (IOException e) {
e.printStackTrace();
}
}