为以下内容生成的null id:class hibernate

时间:2016-04-04 04:23:29

标签: spring hibernate

所有。所以。我有一个问题:

  为生成的

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

如果您还需要别的话,请。请帮忙。

1 个答案:

答案 0 :(得分:0)

以下链接解释了如何将hibernate关系与xml配置集成,所以请注意它。

Hibernate XML Mapping Example

此外,您还需要使用 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();
}

希望你能解决问题!