2017-02-10 40 views
0

我有一个名为task的java对象我想添加一个名为assigneeFullName的字符串属性,而不是引用它将被拉动的完整用户对象从。 基本上我想添加类似:我可以使用休眠而不是整个对象从连接表中提取属性

private String assigneeFullName; 

和:

<many-to-one name="assigneeFullName" class="string" fetch="select"> 
    <column name="USER.FULL_NAME join on ASSIGNEE_ID" precision="22" scale="0" /> 
</many-to-one> 

或:

<property name="assigneeFullName" type="string"> 
    <column name="DUE_DT" length="7" /> 
</property> 

而不是:

private User assignee; 

和:

<many-to-one name="assignee" class="User" 
     fetch="select"> 
<column name="ASSIGNEE_ID" precision="22" scale="0" /> </many-to-one> 
+0

您不希望加载整个'user'对象的任何特定原因? –

+0

这是因为吨的限制和许可和其他相关数据,一个非常大的对象,并且它似乎过度,当我所需要的是单一属性。 –

回答

0

您可以在Select子句中使用投影或构造函数表达式进行查询。

例如(投影)

select task, user.fullName from ... where ... 

或(构造函数表达式)

select new your.project.Result(task,user.fullName) from ... where ... 

当投影将返回Object[],其中[0]是任务实体列表,并[1]是全名。

构造函数表达式将返回一个Result列表(一个你必须实现的类,它有一个合适的构造函数)。

除了使用查询我不认为做这样的映射是可能的。

有关构造函数表达式的更多信息,请参阅here