How can I query specific columns from 2 tables inside my objects using JPA 2.0?
我正在寻找一种方法来请求特定列并使用 CriteriaBuilder 在根对象中显示外来对象。这是上下文:
我有 EntityA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | @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; } ... } |
然后我有实体B
1 2 3 4 5 6 | public class EntityB { int id; int BColumn1; int BColumn2; ... } |
现在,我想从 EntityA 请求列 AColumn1,从 EntityB 请求列 BColumn1,同时将对象 EntityB 放在 EntityA 中。我怎样才能做到这一点?
如何修改以下内容以获取内部带有 EntityB 的部分 EntityA?
1 2 3 4 5 6 7 8 | 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 来实现这一点,虽然它可以是自动化的,所以我的对象会自动填充。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } |
首先,你为什么想要一个部分实体?从 OO 的angular来看,这没有意义。对此有实际的具体要求吗?
其次,您想要实体还是实体列?你可以用
第三,还有 JOIN FETCH。