Доброго времени суток. Подскажите, как верно настроить many-to-one соединение, используя hibernate?
Ссылка на репозиторий:
Notebook
Вводная: у нас имеется приложение "Записная книжка". БД устроена таким образом, что все записи хранятся в главной таблице Note в виде id их компонентов: человек, телефон, описание, группа. Со всеми прочими таблицами установлена связь One-to-one и всё хорошо работает.
Но с группой связь many-to-one и тут начинаются проблемы. Проблема в чем: я не знаю, как это исполнить на стороне пользователя (JSF-page).
В файле Test.xhtml (чуть ниже) я вызываю метод, который вытягивает из таблицы Group все записи, но есть одно "но", мне нужно, чтобы они: 1. Отображались на стороне клиента не как объекты, а как названия групп; 2. Чтобы при нажатии Save (смотри Test.xhtml) в метод передавался либо только Id, либо полный объект.
Body Test.xhtml<body>
<f:view>
<h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
<h1>Create Note</h1>
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Фамилия:"/>
<h:inputText value="#{human.family}"/>
<h:outputText value="Имя:"/>
<h:inputText value="#{human.name}"/>
<h:outputText value="Отчество:"/>
<h:inputText value="#{human.secondName}"/>
<h:outputText value="Дата:"/>
<h:inputText value="#{human.birthday}">
<f:convertDateTime type="date" pattern="dd-MM-yyyy"/>
</h:inputText>
<h:outputText value="Телефон:"/>
<h:inputText value="#{telephone.telephone}"/>
<h:outputText value="Группа:"/>
<!--<ui:repeat value="${groupDAOImpl.group}" var="h">
<h:selectOneMenu value="#{group.group}" title="group">
<f:selectItems value="${h.group}" var="h"/>
</h:selectOneMenu>
</ui:repeat>-->
<h:outputText value="Описание:"/>
<h:inputText value="#{description.text}"/>
</h:panelGrid>
<h:commandButton action="#{notebookFacade.createNote(human,telephone,description)}" value="Save" />
<h:commandButton action="descriptionList" value="Cancel"/>
<br/>
</h:form>
</f:view>
</body>
Закомментированный блок - наша цель. Что должно получиться в итоге: в базу Note (главная база) должна занестись запись с id-шником выбранной пользователем группы (сейчас заносится, но без группы).
Mapping<hibernate-mapping>
<class name="Notebook.Enities.Note" table="note" schema="notebase">
<id name="id" type="java.lang.Integer">
<column name="Id" not-null="true"/>
<generator class="identity"/>
</id>
<one-to-one class="Notebook.Enities.Telephone" name="telephoneId" cascade="save-update"/>
<one-to-one class="Notebook.Enities.Human" name="humanId" cascade="save-update"/>
<!--<many-to-one class="Notebook.Enities.Group" name="group" column="Group" cascade="all" not-null="true"/>-->
</class>
</hibernate-mapping>
Наша цель - закомментированная строка.
GroupDAOImpl.java @Component
public class GroupDAOImpl implements groupDAO {
@Autowired
private SessionFactory sessionFactory;
@Transactional
@Override
public List<Group> getGroup(){
return sessionFactory.getCurrentSession().createCriteria(Group.class).list();
}
}
Если для решения нужны еще какие-либо материалы, пишите в комментариях.