我正在寻找一种方法来请求特定的列,并使用CriteriaBuilder让外部对象出现在根对象中。以下是上下文: 我有EntityA
@Entity
@Table(name = "ENTITY_A")
public class EntityA {
int id;
int entityBKey;
EntityBObject entityBObject;
int AColumn1;
int AColumn2;
@Basic
public Long getEntityBKey() {
return entityBKey;
}
@ManyToOne
@JoinColumn(name = "ENTITY_B_FK")
public EntityBObject getProgramType() {
return entityBObject;
}
@Basic
@Column(name = "COLUMN_1")
public String getAColumn1() {
return AColumn1;
}
...
}
然后我有EntityB
public class EntityB {
int id;
int BColumn1;
int BColumn2;
...
}
现在,我想从EntityA请求列AColumn1,从EntityB请求列BColumn1,同时在EntityA中包含对象EntityB。我怎样才能做到这一点?
如何修改以下内容以获取包含EntityB的部分EntityA?
public List<EntityA> findAll() {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<EntityA> criteria = cb.createQuery(EntityA.class);
Root<EntityA> root = criteria.from(EntityA.class);
criteria.select(root);
return em.createQuery(criteria).getResultList();
}
谢谢!
修改 @Tassos Bassoukos是的,这就是我最终要做的事情,但是当请求变得更加复杂时,它会变得非常混乱。例如:拉动客户的订单,每个订单的项目。有很多java可以实现这一点,我可以自动化,所以我的对象会自动填充。
public List<EntityA> findAll() {
ArrayList<EntityA> result = new ArrayList<>();
Query q = em.createQuery("select eA, eB, from EntityA eA, EntityB eB where eA.key = eB.key");
@SuppressWarnings("unchecked")
List<Object[]> abc = q.getResultList();
for (Object[] array : abc) {
EntityA eA = (EntityA) array[0];
EntityB eB = (EntityB) array[1];
eA.setEntityB(eB);
result.add(pe);
}
return result;
}
答案 0 :(得分:-1)
首先,为什么要部分实体?从OO的角度来看,这没有意义。对此有实际的具体要求吗?
其次,您想要实体的实体或列吗?您可以使用CriteriaBuilder
同时执行这两项操作,但是您需要明确a)您想要实现的目标,b)您希望实现的目标。
第三,有JOIN FETCH。