I pode mapear diretamente os dados de um provedor externo sobre ele persistir em DB?

AndreaNobili:

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 orderbanco 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 orderregistros 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?

v.ladynev:

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 Integerno lugar de intpor id. Melhor usar Longem 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;

    }

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=350372&siteId=1
Recomendado
Clasificación