2015-02-12 78 views
0

请看下面的代码。如何使用Hibernate向数据库插入`null`值?

String textName=request.getParameter("textName"); 
String textadr1=request.getParameter("textadr1"); 
String textadr2=request.getParameter("textadr2"); 
String textcntry=request.getParameter("textcntry"); 
String textregNo=request.getParameter("textregNo"); 

    AgentContact agentContact=new AgentContact(); 
    AgentContact agentContact2=new AgentContact(); 
    Agent agent=new Agent(); 

    agent.setName(textName); 
    agent.setRegistrationNumber(textregNo); 
    agent.setDateOfDealStart(textDateDealing); 
    agent.setRegistrationDate(textregDate); 

    session.save(agent); 
    session.save(agentContact); 
    session.save(agentContact2);   
    session.getTransaction().commit(); 

在上面的代码中,我们从形式获取值,这就是为什么使用request.getParameter()。但是,用户可能会填写或不填写名称等字段,因此txtName将为空。

但是,当执行这段代码时,我注意到Hibernate为这些非指定的字符串添加了“空”字符串,而不是输入null。如何设置代码,以便在文本实际上为空时输入null值?

+0

你的数据字段是否有默认值?它可以为空吗? – djb 2015-02-12 08:43:23

+0

@djb:可以,可以。没有默认值,这意味着如果你没有输入任何东西,它将是'NULL' – 2015-02-12 08:44:27

回答

2

这不是一个Hiberate问题。

在这里看到:

Are empty fields in form of JSP null or ""?

你只需要检查一个空字符串,并采取相应的行动:

agent.setName(textName.equals( “”)空:textName);

但是,上面是一个有些简单的解决方案:如果用户输入空间会怎么样?您可以使用Apache Commons StringUtils的方法进行更强大的检查:

例如

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isBlank(java.lang.CharSequence)

agent.setName(StringUtils.isBlank(textName)空:textName);

+0

+1,或者简单的StringUtils.trimToNull:http://commons.apache.org/proper/commons-lang/apidocs/src-html /org/apache/commons/lang3/StringUtils.html#line.433 – home 2015-02-12 09:23:10

+0

嗯,这是有道理的。请求参数将以“”形式出现,不为空。 – djb 2015-02-12 09:34:32

+0

谢谢。感谢你的帮助。 – 2015-02-12 16:28:44

相关问题