保存值对象的代码有什么问题?

时间:2015-02-06 00:54:47

标签: java mysql hibernate

我有两个实体和两个价值对象 - 员工,卡,员工编号和&卡号。 Employee和Card之间的关系是一对多的。我创建了一个Employee实例和一个Card实例,并将它们保存到数据库中......

EmployeeRepositoryHibernate employeeRepository = new EmployeeRepositoryHibernate();
employeeRepository.setSessionFactory();
employeeRepository.getSession().beginTransaction();

EmployeeNumber employeeNumber = new EmployeeNumber("MNO");
Location location = new Location("Room 1");
CardNumber cardNumber = new CardNumber("1");

Employee employee = new Employee(employeeNumber, location);        
    Card card = new Card(cardNumber, "1111", employee);

employeeRepository.getSession().save(employee);
employeeRepository.getSession().save(card);

employeeRepository.getSession().getTransaction().commit();
employeeRepository.getSession().close();

除了它不会保存,显示以下错误消息...我可以保存一个员工,但是当我尝试保存一张相关的卡时抛出该消息... mysql数据库还没有关系..两个表都是分开的......

问题已解决:必需的相关表格。

Caused by: java.sql.SQLException: Field 'employeeNumber' doesn't have a default value

以下是Card和Employee的两个Hibernate XML映射文件......

卡     

<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field">
  <class name="model.Card" table="Card">

        <id name="CardID" type="long">
        <column name="CardID" />
        <generator class="identity" />
    </id>

   <component name="cardNumber" unique="true">   
       <property name="number" column="cardNumber"/>  
    </component>

  <many-to-one name="employee" class="model.Employee" fetch="select">
        <column name="EmpID" not-null="true"></column>
</many-to-one>

<property name="PIN" column="PIN"/>
</class>

</hibernate-mapping>

员工

    <?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping default-access="field">
  <class name="model.Employee" table="employee">

 <id name="EmpID" column="EmpID">
      <generator class="org.hibernate.id.IdentityGenerator"/>
    </id>

   <component name="employeeNumber" class="model.EmployeeNumber" > 
       <property name="number" column="employeeNumber" type="string"/>  
    </component>


<component name="location">   
   <property name="location" column="Location" type="string"/>  
</component>

 <set name="cards" inverse="true" cascade="all">
        <key>
                <column name="EmpID" not-null="true"></column>
            </key>
            <one-to-many class="model.Card"/>
    </set>

  </class>
</hibernate-mapping>

1 个答案:

答案 0 :(得分:0)

其中一个可能会有所帮助:

  • 向列employeeNumber

    添加默认值

    ALTER TABLE 'table_name' ALTER 'employeeNumber' SET DEFAULT NULL

  • 如果您将auto increment用作employeeNumber,请使用primary key

  • 在插入过程中为employeeNumber列提供值。