所有。所以。我有一个问题:
为生成的null id:class Notebook.Enities.Telephone
是的,这个问题一直是stackoverflow,但我在这里。为什么?我通过xml映射安排。
我的Note.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<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 name="telephoneId" class="Notebook.Enities.Telephone" cascade="save-update"/>
<one-to-one class="Notebook.Enities.Description" name="descriptionId" cascade="save-update"/>
<one-to-one class="Notebook.Enities.Human" name="humanId" cascade="save-update"/>
<many-to-one class="Notebook.Enities.Group" name="group" fetch="join" lazy="false">
<column name="Group" not-null="true"/>
</many-to-one>
</class>
</hibernate-mapping>
接下来,我的Telephone.hbn.xml (电话 - ru-lang电话。)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Notebook.Enities.Telephone" table="telephone" schema="notebase">
<id name="id" type="java.lang.Integer">
<column name="Id"/>
<generator class="foreign">
<param name="property">note</param>
</generator>
</id>
<one-to-one name="note" class="Notebook.Enities.Note" constrained="true"/>
<property name="telephone" column="Telephone"/>
<property name="descripton" column="Descripton"/>
</class>
</hibernate-mapping>
JSF-page Text.xhtml (其他对象都比喻电话)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
>
<body>
<f:view>
<h:messages errorStyle="color: red" infoStyle="color: green" layout="table"/>
<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="Группа:"/>
<h:inputText value="#{group.group}"/>
<h:outputText value="Описание:"/>
<h:inputText value="#{description.text}"/>
</h:panelGrid>
<h:commandButton action="#{notebookFacade.createNote(human,telephone,group,description)}" value="Save" />
<h:commandButton action="descriptionList" value="Cancel"/>
<br/>
</h:form>
</f:view>
</body>
</html>
和方法createNote();
public void createNote(Human human, Telephone telephone, Group group, Description description){
Note note = new Note();
note.setTelephoneId(telephone);
telephone.setNote(note);
note.setHumanId(human);
human.setNote(note);
note.setGroup(group);
note.setDescriptionId(description);
description.setNote(note);
getNoteDAO.addNotes(note);
System.out.println("Add work!");
}
和addNotes();
public void addNotes(Note note) {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(note);
session.getTransaction().commit();
System.out.println("This function is worked");
session.close();
}
我的计划:enter image description here
如果您还需要别的话,请。请帮忙。
答案 0 :(得分:0)
以下链接解释了如何将hibernate关系与xml配置集成,所以请注意它。
此外,您还需要使用 addNotes 服务类方法添加 @Transactional
@Transactional
public void addNotes(Note note) {
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(note);
session.getTransaction().commit();
System.out.println("This function is worked");
session.close();
}
希望你能解决问题!