2014-03-31 96 views
0

我有主表和明细表
1-主-Employee(ID INT PRIMARY KEY,名字VARCHAR2,ADDRESS_ID INT外键)
2-详情 - 地址(ID INT主键,块VARCHAR2,建筑VARCHAR2,面积VARCHAR2)

JPA如何让某些字段不是所有的字段

我使用JPA获取对象,我想某些领域不是全部,我想 (Employee.id,Employee.name,Address.area) 只有
所以我怎么能没有得到所有的领域呢?
谢谢。

+0

如果这两个表之间没有任何关系,那么如果使用'createQuery'或'namedQuery',我认为你需要得到两个物体。或者你也可以使用'nativeQuery' – Yubaraj

+0

有一个关系,但是当我得到对象时,我得到所有的字段:( – Hazim

+0

是的,如果你返回对象,那么你会得到所有的字段。所以最好的方法是使用'nativeQuery' – Yubaraj

回答

0

你确实,通过使用查询:

select e.id, e.name, a.area from Employee e left join e.address a where ... 

这样的查询将返回一个List<Object[]>,其中每个对象数组包含三个选定的元素。

但是,通过只选择那些字段,您可能不会获得任何收益,因为执行数据库查询时通常会花费的是查找数据以检索和执行表之间的联接。你最好继续使用您的实体,并使用下面的查询,而不是,它会返回员工的情况下,与已加载它们的地址:

select e from Employee e left join fetch e.address where ... 

这将返回一个List<Employee>

+0

谢谢B Nizet :),但结果是一样的,结果得到所有字段 – Hazim

+0

你看过我的回答了吗?它明确而清楚地解释说,你只能检索这3个字段(并显示如何去做),但通常没有用处,因为这样做没有显着的性能提升。 –

+0

谢谢澄清,但我的问题,因为我有表包含3个字段包含5000多个varchar作为超过3种语言的文本,所以我想只加载一个语言不是3种语言的字段。 – Hazim

0

我知道这有点晚了,但仍然想回答以防万一有人可能会遇到这个问题:你有没有考虑尝试像懒惰和渴望的提取类型?有了这些,你可能会得到直接标记为“渴望”的所有字段,“懒”字段被提取

相关问题