Eu sou muito novo na Primavera de dados JPA e ORM em geral. Eu tenho a seguinte dúvida arquitetônico.
Vamos considerar esta classe de entidade:
@Entity // This tells Hibernate to make a table out of this class
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name = "name")
private String fullName;
private String address;
private String product;
@Column(name = "order_date_time")
private String orderDate;
private Double quantity;
// getters, setters
}
Esta classe é mapeado no meu order
banco de dados tabela.
Na minha aplicação dados vieram de um documento Excel que eu analisar via Apace POI e do que eu tenho de persistir no banco de dados. Minha dúvida é: Eu posso usar diretamente esta classe de entidade para mapear uma linha Excel usando Apache POI, a fim de persistirem as linhas Excel como order
registros da tabela? Ou é melhor usar uma outra classe DTO para ler as linhas do Excel e do que o uso deste DTO para definir os valores dos campos da minha classe de entidade?
Uma classe de entidade pode conter um construtor usando campos?
Do ponto de vista arquitetônico melhor ter uma classe DTO e encapsular alguma lógica lá.
class CsvOrder {
private String fullName;
private String address;
public CsvRecord(String[] record) {
fullName = get(record, FULLNAME_INDEX);
address = get(record, ADDRESS_INDEX);
}
public Order toOrder() {
Order result = new Order();
result.setFullName(fullName);
return result;
}
}
public static <T> T get(T[] arr, int index) {
final T notFound = null;
return index < size(arr) ? arr[index] : notFound;
}
public static <T> int size(T[] array) {
return array == null ? 0 : array.length;
}
Você pode colocar um método estático toOrder()
para OrderServiceMapper
, se você quiser camadas totalmente dissociar
class OrderServiceMapper {
public static Order toOrder(CsvOrder order) {
Order result = new Order();
result.setFullName(order.getFullName());
return result;
}
}
Além disso, use Integer
no lugar de int
por id. Melhor usar Long
em todos os lugares
// This tells Spring to add this class to Hibernate configuration during auto scan
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
}