我有两个实体:
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是否有可能使用POJO 1获取id,claimedId和name的数据并转换为POJO 2?
答案 0 :(得分:0)
您永远不要尝试将Entity类从一个实体转换为另一个实体,因为每个实体都代表一个表。
但是,Hibernate提供了一种从使用Hibernate POJO2
类选择的列中返回Transformers
作为对象的方法。在您的情况下,您将需要使用要返回的列的getter setter编写自定义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
类,而不是实体类。