通过hibernate映射将数据插入数据库表失败

时间:2012-04-06 06:57:34

标签: java mysql database hibernate mapping

我正在使用Hibernate将一行插入数据库,我使用Visual Paradigm(企业版)生成数据库表。

以下是错误

  

org.orm.PersistentException:org.hibernate.PropertyValueException:   not-null属性引用null或transient值:   com.patientmanagement.model.Patient.visitRecord at   org.orm.PersistentSession.saveOrUpdate(PersistentSession.java:631)at at   org.orm.PersistentManager.saveObject(PersistentManager.java:287)at   com.patientmanagement.model.PatientDAO.save(PatientDAO.java:303)at   com.test.InsertData.main(InsertData.java:28)引起:   org.hibernate.PropertyValueException:not-null属性引用a   null或瞬态值:   com.patientmanagement.model.Patient.visitRecord at   org.hibernate.engine.Nullability.checkNullability(Nullability.java:100)     在   org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:312)     在   org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)     在   org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)     在   org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)     在   org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)     在   org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)     在   org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)     在   org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:687)     在org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:679)     在org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:675)     在org.orm.PersistentSession.saveOrUpdate(PersistentSession.java:629)     ......还有3个

这是要测试的插入函数

public class InsertData {
    public static void main(String[]args) throws PersistentException
    {
        PersistentTransaction trans=PatientmanagementPersistentManager.instance().getSession().beginTransaction();
        try
        {
            //create patient instance
            Patient patient=PatientDAO.createPatient();

            //set patients properties
            patient.setName("Markus Rosevelt");
            patient.setRegisterDate(new Date());

            //save patient
            PatientDAO.save(patient);
            trans.commit();
        }catch(Exception e){
            trans.rollback();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

你可能已经在数据库中将列visitRecord定义为NOT NULL,现在你试图在该列上插入一个空值,或者你的映射不正确,你能显示你的映射和你的表定义吗?

答案 1 :(得分:0)

此消息表示您无法创建具有空属性的Patient实体。在这种情况下,空属性是Patient实体中的visitRecord属性。您可以使用

之类的内容为此属性指定值
patient.setVisitRecord(some values);

我希望这能解决你的问题。