2017-02-10 37 views
0

У меня есть объект java с именем task Я хотел бы добавить свойство string с именем assigneeFullName, а не ссылаться на полный пользовательский объект, который он будет вытаскивать из. По существу я хотел бы добавить что-то вроде:Могу ли я вытащить свойство из объединенной таблицы, используя hibernate, а не весь объект

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 ... 

или (Constructor Expression)

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

Где Проекция будет возвращать список Object[], где [0] задача Entity и [1] является FULLNAME.

Выражение конструктора возвращает список результатов (класс, который вам нужно реализовать, и который имеет соответствующий конструктор).

Помимо использования запроса, я не думаю, что такое сопоставление возможно.

См. here для получения дополнительной информации о выражениях конструктора.