Есть ли способ (например, плагин Eclipse) автоматически генерировать DTO из объекта (JPA)?

#java #eclipse #jpa #code-generation #dto

#java #eclipse #jpa #генерация кода #dto

Вопрос:

Я хотел бы простой инструмент прямой генерации DTO, который либо

  1. Сгенерируйте его «на лету» (например, cglib — создайте класс и объект DTO «на лету»)
  2. Или плагин Eclipse, который возьмет объект и сгенерирует DTO (пользователь укажет, какой древовидный график включить, а для невключенных будет включать внешние ключи вместо связанных объектов и т.д.)

Например. возьмите что-то вроде этого

 @Entity
@Table(name="my_entity")
public class MyEntity {
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String name;

    @ManyToOne
    private RelatedEntity related;
     public RelatedEntity getRelated(){
          return related;
     }
     ...
  

И генерировать что-то вроде этого :

 @Entity
@Table(name="my_entity")
public class MyEntity imlpements MyEntityDTO {
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String name;

    @ManyToOne
    private RelatedEntity related;
     //overrides MyEntity interface, it's allowed to narrow return type 
     public RelatedEntity getRelated(){
          return related;
     }
     ...

     //implements MYEntityDTO respective interfaces

     public Long getRelatedId(){return related.getId();}
  

И интерфейсы DTO:

 public interface MyEntityDTO {

    public String getId();
    public String getName();
    public Long getRelatedId();
    public RelatedEntityDTO getRelated(); //RelatedEntity implements RelatedEntityDTO

    ...
}

public interface RelatedEntityDTO {
    ... 
}
  

Если мы не хотим включать дочерние элементы в график, удалите его из интерфейса DTO:

 public interface MyEntityDTO {

    public String getId();
    public String getName();
    public Long getRelatedId();

    ...
  

Я уверен, что для этого есть какой-нибудь плагин eclipse, и если нет, я призываю кого-нибудь написать его или объяснить, почему то, что я хочу, бесполезно (и предоставить альтернативное предложение)

Комментарии:

1. У нас пока нет плагина IDE, но Blaze-Persistence Entity Views ( github.com/Blazebit/blaze-persistence#entity-view-usage ) использует интерфейсы точно так же, как вы это продемонстрировали. В какой-то момент мы собираемся разработать для этого плагины IDE. Вы можете посмотреть github.com/Blazebit/blaze-persistence/issues/364 чтобы получать обновления по этому вопросу

Ответ №1:

Вероятно, инструменты гибернации должны делать это: http://hibernate.org/subprojects/tools.html

Комментарии:

1. Я не смог найти как, вы знаете это как факт?

2. В нем сказано, что он пишет целое приложение Seam, поэтому я бы сказал, что это правда, и предлагаю Roo в качестве альтернативы Spring, но нет плагина, отличного от Spring / Seam, который я мог бы найти … что немного грустно … 🙂 В любом случае, это лучший ответ на данный момент…

Ответ №2:

Инструменты Telosys могут генерировать как объект JPA, так и DTO

Давайте взглянем на это руководство https://sites.google.com/site/telosystutorial/springmvc-jpa-springdatajpa

он генерирует полноценное приложение Spring MVC CRUD с архитектурой JPA: https://sites.google.com/site/telosystutorial/springmvc-jpa-springdatajpa/presentation/architecture Также генерируется объект mapper / DTO (он использует «org.modelmapper»)

Шаблоны настраиваются

Ответ №3:

Попробуйте взглянуть на: https://github.com/nikelin/spring-data-generation-kit

Но это подходит только для вас, если ваш проект находится под управлением Maven.