如何强制Hibernate保存无效值? (不像听起来那么愚蠢)

时间:2014-02-12 19:36:29

标签: java sql hibernate jpa

这比标题看起来更复杂。这是问题所在:

我有一个Spring Web Flow应用程序,它是一系列表单,用户按特定顺序浏览。两个表单,我们称之为“表单2”和“表单3”,填充相同数据库表的不同字段,我们称之为“公司”。麻烦的是,Company表是所有不可空的字段。因此,当用户填写“表单2”字段并尝试保存时,“表单3”字段必须填充一些内容。例如,我必须在“员工人数”字段中保存外键值。

然后,在“表单3”中,我必须重新读取这些字段并忽略刚刚写入的值,并向用户显示一个空白表单。我想在FK字段中保存“sentinel”值,并在重新读取时检测它。但是我正在使用Hibernate并且我无法确定正确的语法以使Hibernate在这种情况下保存本质上是“无效”的外键。

我需要标记的表字段是:

NUMBER_OF_EMPLOYEES CHAR(1) DEFAULT ' ' NOT NULL

该列为NOT NULL,因此我不能只在其中添加NULL。我需要将垃圾数据放入Hibernate / JPA关系:

@ManyToOne(optional=true)
@JoinColumn(name = "NUMBER_OF_EMPLOYEES", nullable = true)
private NumberOfEmployees numberOfEmployees;

如果有效密钥是“A”,“B”和“C”,我想把“X”放在这里。这是可能的,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:2)

答案:您至少没有修改数据库中的基础表,因为您的数据库服务器将强制执行not-null属性,即使Hibernate没有。如果没有使用下面信息的能力,最好的办法就是在会话中传递一个逐渐被数据填满的对象。

但是,既然你提到你正在使用Spring,也许你可以实现AbstractWizardFormController。这允许您随时填充数据,一旦用户完成最后一页,您就可以将所有数据提交给数据库。

请在此处查看javadoc:

http://docs.spring.io/spring/docs/2.5.6/api/org/springframework/web/portlet/mvc/AbstractWizardFormController.html

和这里的教程:

http://www.mkyong.com/spring-mvc/spring-mvc-handling-multipage-forms-with-abstractwizardformcontroller/

答案 1 :(得分:0)

怎么样“-1”,你不能滥用系统。更改您的设计或按照您的定义使用它。 你也可以删除“not null”(听起来比使用“-1”更好)。