Может ли Hibernate конвертировать один Pojo данных в другой Pojo с несколькими полями - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть две сущности:

POJO 1:

@Entity
@Table(name = "tasks")
Class Task{

    @Id
    @Column(name = "id")
    private String id ;

    private String claimedId;

    private String name ; 

    private Date date;
    // gets etc...

}

и

POJO 2:

@Entity
@Table(name = "calimtask")
Class ClaimTask{

    String id ; 

    String claimedId; 

    String name; 

    // gets etc... 
} 

POJO 2 создается снекоторые поля POJO 1. У нас есть данные для таблицы задач в базе данных.

Возможно ли, что Hibernate может получить данные id, saidId и name с помощью POJO 1 и может преобразовать в POJO 2?

1 Ответ

0 голосов
/ 04 марта 2019

Никогда не пытайтесь преобразовать класс сущности из одной сущности в другую, поскольку каждая сущность представляет собой таблицу.

Однако Hibernate предоставляет средство для возврата POJO2 в качестве объекта из столбцов, выбранных с использованием Hibernate Transformers класс.В вашем случае вам нужно написать пользовательский POJO2 с установщиком-получателем столбцов, которые вы возвращаете.Обратите внимание, что важно, чтобы переменные были названы точно так же, как столбцы псевдонимов.

public static List<ClaimTask> getDetailsfromTask(){
    Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction tx = null;
    List<ClaimTask> list =  new ArrayList<ClaimTask>();
    try {
        tx = session.beginTransaction();
        Criteria cr = session.createCriteria(Task.class);
        cr.setProjection(Projections.projectionList()
                .add......;//Pick all the columns you need from Task
        cr.setResultTransformer(Transformers.aliasToBean(ClaimTask.class));
        list = (List<ClaimTask>) cr.list();
   }catch (Exception asd) {
        System.out.println(asd.getMessage());
        if (tx != null) {
            tx.rollback();
        }
    } finally {
        session.close();
    }
     return list;
}

Обратите внимание, что свойства в ClaimTask должны называться так же, как псевдонимы столбцов, которые вы извлекаете из Task.Также убедитесь, что ClaimTask это просто getter setter класс, а не класс сущности.

...