如何使用JPA 2.0查询对象内的2个表中的特定列?

时间:2015-10-14 22:10:37

标签: jpa jpa-2.0

我正在寻找一种方法来请求特定的列,并使用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;
}

1 个答案:

答案 0 :(得分:-1)

首先,为什么要部分实体?从OO的角度来看,这没有意义。对此有实际的具体要求吗?

其次,您想要实体的实体或列吗?您可以使用CriteriaBuilder同时执行这两项操作,但是您需要明确a)您想要实现的目标,b)您希望实现的目标。

第三,有JOIN FETCH