2015-02-06 34 views
0

我有两个实体和两个值对象 - 员工,卡片,员工编号&卡号。员工与卡之间的关系是一对多的关系。我创建了员工的一个实例,像这样,并将其保存到数据库中卡的实例...这个保存值对象的代码有什么问题?

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 

这里是卡和员工两个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> 
+0

你能显示对象Employee吗? – Jens 2015-02-06 07:50:45

回答

0

其中一个可能帮助:

  • 默认值添加到列employeeNumber

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

  • 使用auto increment如果您使用employeeNumber作为primary key

  • 在插入期间向employeeNumber列提供值。